webForumDet fria alternativet

GROUP BY

2 svar · 1 082 visningar · startad av streetrobban

streetrobbanMedlem sedan jan. 20011 184 inlägg
#1

Tjena,

Jag sitter fast lite på en grej.

Jag kör en GROUP BY på några poster där jag vill att datumet från den senaste posten ska visas.

Min tabell ser ut som nedan:

ID     Tid          Datum              ChildID
(1,    '10:00',    '2011-03-14',     0),
(2,    '11:00',    '2011-03-14',     1),
(3,    '13:00',    '2011-03-14',     1),
(4,    '14:00',    '2011-03-14',     1),
(5,    '15:00',    '2011-03-14',     1),
(6,    '16:00',    '2011-03-14',     1);

Och om jag använder följande kod:

<?php
// Öppna databasen
require '../includes/db.php';

// Hämta alla meddelanden
$get = mysql_query("SELECT Time, Date, ChildID
FROM gruppera
GROUP BY ChildID
ORDER BY Date DESC, Time DESC");
while($row = mysql_fetch_array($get))
{
	$Time = $row['Time'];
	$Date = $row['Date'];
	$ChildID = $row['ChildID'];
	
	echo "$Date, $Time - $ChildID<br>";
}

// Stäng databasen
mysql_close($open);
?>

Så skris följande ut:

2011-03-14, 11:00 - 1
2011-03-14, 10:00 - 0

Det betyder att den tar den första posten med ChildID = '1' och skriver ut den när man grupperar. Jag vill att den ska skriva ut det senaste datumet. Har någon koll på hur man gör det?

nitro2k01Medlem sedan aug. 20037 630 inlägg
#2

Om du hade använt en av de inbyggda datumtyperna (så att tid och datum hade hamnat i samma kolumn) hade du helt sonika kunnat skriva MAX(tid). Om du inte vill göra om strukturen så har du två val.

  1. Köra MAX på någon slags sammanfogning av din date och time.
  2. Köra en subselect i stil med
(SELECT time, date 
    FROM gruppera 
    ORDER BY Date DESC, Time DESC
    LIMIT 1)

Jag tror ingen av de lösningarna har särkilt smickrande prestanda.

Om du organiserar tid/datum i olika fält enbart för att det ska bli enklare att skriva ut, så kan jag tipsa om funktionerna date och time som plockar ut datumdelen och tidsdelen.

streetrobbanMedlem sedan jan. 20011 184 inlägg
#3

Okej! Jag vet inte varför, men jag har alltid kört tiden som TEXT-fält i databasen. Men jag testade att ändra det till TIME, och nu funkar det lite bättre :)

Ska se om jag kan lösa biffen imorgon. Tack för ditt svar!

Genererad på 385 ms · cache AV · v20260730165559-full.f96bc7eb