webForumDet fria alternativet

Går det att jämföra BARA datumet i en datetime?

PHP

12 svar · 785 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Jag har en databastabell som innehåller pussel. En av kolumnerna är en datetime som talar om när pusslet kom dit. Jag skriver en fråga i SQL som plockar ut alla pussel så att de nyaste hamnar först, så långt funkar det utmärkt. :)

Men... Nu vill jag lägga in en header i utskriften:
These puzzles have been available since <datum>
Denna ska alltså bara stå EN gång per datum (eftersom vanligtvis flera pussel adderas samma dag). Jag vet hur jag ska få in det i whileslingan, det som strular till det är datumhanteringen.

  1. Kan jag jämföra bara datumdelen (dvs strunta i tidsinfon) mellan två datetimes?

  2. Hur skriver jag enklast ut bara datumdelen?

  3. Varför är inte två stycken '2007-11-09 00:00:00' lika?

Tacksam för svar...

Medlem sedan okt. 20001 285 inlägg
#2
<?php
$date = "";
while ($row = mysql_fetch_array($sql))
{
    if (date("Y-m-d",$row['date']) != $date)
    {
        echo "<h2>" . $row['date'] ."</h2>";
        $date = date("Y-m-d",$row['date']);
    }
    echo "<p>" . $row['game'] ."</p>";
}
?>

Nu är jag bakis så det kan mkt väl vara tokfel :o

Medlem sedan juni 20034 013 inlägg
#3

Om du skriver så här i din mysql-query i stället för bara namnet på din datetime-kolumn så får du bara ut datumdelen:

SELECT LEFT(din_datetime-kolumn, 10) AS datum

Medlem sedan mars 20034 471 inlägg
#4

tydal skrev:

Om du skriver så här i din mysql-query i stället för bara namnet på din datetime-kolumn så får du bara ut datumdelen:

SELECT LEFT(din_datetime-kolumn, 10) AS datum

Hum? :q

SQL skrev:

weird..You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT LEFT(Pok, 10) AS datum, Po, Pi, Pk FROM T' at line 1

på följande fråga:

$sql = "SELECT Pi, Pt, Pb, SELECT LEFT(Pok, 10) AS datum, Po, Pi, Pk  
        FROM P natural join T natural join K  
        WHERE ....
        ORDER BY P.Pok DESC";

Varför gick inte denna smidiga lösning?

Medlem sedan mars 20034 471 inlägg
#5

Fuel, ditt förslag leder till ett fel om ett "not well formed date", vilket gör att datumet kommer ut som något som inträffade på tidigt 70-tal, och jag kan försäkra att det datumet saknar varje likhet med hur det borde se ut...

Medlem sedan okt. 20001 285 inlägg
#6

ja.. det är nog skrot .. såna här dagar ska man bara vila :x

Medlem sedan mars 20034 471 inlägg
#7

Hum, jag lyckades få tag i bara datumdelen mha hjälpfunktion, men de är fortfarande inte lika???

function getDatePart($dateTime) {
	$parts = explode(" ", $dateTime);
	return $parts[0];
}
//....
$dateOld = "";
while ($rowJS = mysql_fetch_array($resJS)) {
	$dateCurr = getDatePart($rowP['datum']);
	if ($dateCurr != $dateOld) {
		$dateOld = $dateCurr;
		echo "<h2>These puzzles have been available since $dateCurr</h2>";
	}
//....

Men det skumma är att denna header alltid kommer ut, även när datumen ÄR lika??? :q (Strunt samma - tar det till en egen tråd.)

Medlem sedan maj 2005562 inlägg
#8

För att enbart få datumen från en DATETIME

SELECT DATE_FORMAT(datetime_kolumn, "%Y-%m-%d") as datum FROM ...

DATE_FORMAT()

Medlem sedan mars 20034 471 inlägg
#9

sl0k skrev:

För att enbart få datumen från en DATETIME

SELECT DATE_FORMAT(datetime_kolumn, "%Y-%m-%d") as datum FROM ...

DATE_FORMAT()

Märkligt... Ger samma felmeddelande som tydals förslag? Även testat med ' runt datumformatet, ingen skillnad.

SQL skrev:

weird..You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT DATE_FORMAT(Pok, "%Y-%m-%d") AS datum, Po, Pi, Pk ' at line 1

Min explode plockar ut rätt del, men jämförelsen mellan två lika datum funkar inte. Headern skrivs fortfarande ut för alla pussel.

Medlem sedan sep. 20005 700 inlägg
#10

SELECT i SELECT kom väl först i 5.0, eller har jag fel?
Vilken MySQL-version kör du?

Medlem sedan mars 20034 471 inlägg
#11

Antar att det är detta du menar? MySQL klientversion: 5.0.38

För övrigt: Tack för kommentaren om SELECT i SELECT! Äntligen klarnade det i denna hjärna... jag hade ju glömt parenteserna runt! Följande funkar:

SELECT... (SELECT DATE_FORMAT(datetime_kolumn, "%Y-%m-%d")) as datum ....
Medlem sedan dec. 200012 464 inlägg
#12

Det behövs inget extra select

 SELECT... DATE_FORMAT(datetime_kolumn, '%Y-%m-%d')

SELECT i SELECT kom väl först i 5.0, eller har jag fel?

Mm, 4.1 var det.

Medlem sedan mars 20034 471 inlägg
#13

Tack för alla svar! :birp

284 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
148 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)