2016-08-22 2 views
-2

Я использую php, mysql и html вместе, чтобы показать таблицу. Но я хочу сортировать элементы по метке времени и группировать элементы с одинаковым идентификатором вместе. Пример:SQL Сортировка по метке времени и группе по id

Unsorted стол:

timestamp  id  name  description 

14:02   2  Hans  Is very nice! 
12:01   3  Jürgen  Is very bad! 
10:03   2  Hans  Again good. 
11:08   6  Anna  BAD! 
06:09   11  Peter  Good. 

правой сортируется таблица:

timestamp  id  name  description 

06:09   11  Peter  Good. 
10:03   2  Hans  Again good. 
14:02   2  Hans  Is very nice! 
11:08   6  Anna  BAD! 
12:01   3  Jürgen  Is very bad! 

Bad отсортированный стол:

timestamp  id  name  description 

06:09   11  Peter  Good. 
10:03   2  Hans  Again good. 
11:08   6  Anna  BAD! 
12:01   3  Jürgen  Is very bad! 
14:02   2  Hans  Is very nice! 

Я думаю, что должно быть INNER JOIN: Сначала найдите элемент со старейшей меткой времени. Тогда посмотрите, есть ли другой элемент с тем же идентификатором: Если да, он должен быть помещен рядом с элементом со старейшей меткой времени.

+0

Что делает ваш текущий вид запроса, как? –

+0

Я хочу использовать SELECT * ... – SebastianHannes

+0

Нам понадобится нечто большее. Вы говорите, что у вас в настоящее время нет запросов, верно? Что вы уже пробовали? Что, собственно, не работает для вас? –

ответ

-1

Попробуйте:

Subquery возвратит вас температура колонки, имеющие NewTimeStamp, который будет одинаковым для той же значения столбца ID.

SELECT 
    X.timestamp, 
    X.Id, 
    X.name, 
    X.description 
FROM 
(
    SELECT TMain.timestamp,TMain.id,TMain.name,TMain.description 
    (
     CASE WHEN ((SELECT COUNT(1) FROM @tblTest T WHERE T.Id=TMain.Id))>0 
     THEN (SELECT TOP(1) timestamp FROM @tblTest T WHERE T.Id=TMain.Id ORDER BY timestamp) 
     ELSE timestamp END 
    ) AS NewTimeStamp FROM @tblTest TMain 
)X 
ORDER BY X.NewTimeStamp,X.timestamp 
+0

Могу ли я узнать причину для голосования? –

+0

Потому что это неправильно. Вторичный столбец сортировки будет использоваться только тогда, когда в столбце первичной сортировки имеется несколько вхождений одного и того же значения. –

+0

Да, это неправильно! Я испытал это! – SebastianHannes

1

Если вы заинтересованы в ответе, который использует как MySQL и PHP, то это будет достичь того, чего вы хотите.

MySQL

SELECT `timestamp`, `id`, `name`, `description` FROM TableName ORDER BY `timestamp` DESC; 

PHP

// execute your query and put the results into $dateSortedArray 
// I am assuming you know how to do this 

$outterArray = array(); 

// iterate through each row of the $dateSortedArray 
foreach($dateSortedArray as $row) 
{ 
    // this is where we're doing the 'sub ordering' part 
    // I'm pre-pending 'id_' in the index so that it is string-based 
    if(!isset($outterArray["id_".$row["id"]])) 
    { 
     // if we do not see this id in our result array yet, 
     // add a new array with this row in it 
     $outterArray["id_".$row["id"]] = array($row); 

    } 
    else 
    { 
     // if we have already see this id before, 
     // add the current row to the array with this id-based index 
     $outterArray["id_".$row["id"]][] = $row; 
    } 

} 


// iterate through our result array 
foreach($outterArray as $innerArray) 
{ 
    foreach($innerArray as $innerRow) 
    { 
     // simply dump out each line, comma-seperated 
     echo implode(",", $innerRow) . "\r\n"; 
    } 
} 

Working Example

+0

Получите мой УФ чисто для усилий и tanacity – RiggsFolly

+0

@RiggsFolly Спасибо :) –

Смежные вопросы