Sorteren op datum
Code (php)
1
2
3
4
5
6
2
3
4
5
6
CREATE TABLE `notifications` (
`noteID` int(11) NOT NULL AUTO_INCREMENT,
`content` text,
`time` int(11) NOT NULL,
PRIMARY KEY (`noteID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
`noteID` int(11) NOT NULL AUTO_INCREMENT,
`content` text,
`time` int(11) NOT NULL,
PRIMARY KEY (`noteID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Nu wil ik alle meldingen met dezelfde datum bij elkaar zetten, als volgt:
23 september 2015
melding X
melding X
28 september 2015
melding X
melding X
melding X
12 oktober 2015
melding X
Hoe doe ik dat? Welke query moet ik dan uitvoeren?
Gewijzigd op 17/06/2016 19:15:28 door Daan Vee
Is dit de databasestructuur die je echt gebruikt of heb je die voor de vraag vereenvoudigd?
Nee, dit INT is 11 inderdaad... typfoutje...
Je moet dus een nieuw kopje maken als we in een andere dag terecht komen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$current = '';
// Hier een query die sorteert op datum en tijd!
$query = "SELECT * FROM notifications ORDER BY `time` DESC";
$result = mysqli_query($con, $query);
while($row = mysqli_fetch_assoc($result))
{
if($current != date('%d %F %Y', $row['time']))
{
$current = date('%d %F %Y', $row['time']);
echo '<h4>' . $current . '</h4>';
}
echo $row['content'] . '<hr>';
}
?>
$current = '';
// Hier een query die sorteert op datum en tijd!
$query = "SELECT * FROM notifications ORDER BY `time` DESC";
$result = mysqli_query($con, $query);
while($row = mysqli_fetch_assoc($result))
{
if($current != date('%d %F %Y', $row['time']))
{
$current = date('%d %F %Y', $row['time']);
echo '<h4>' . $current . '</h4>';
}
echo $row['content'] . '<hr>';
}
?>
Gewijzigd op 17/06/2016 20:02:07 door Frank Nietbelangrijk
Ik krijg een foutmelding op lijn 9, maar ik zie niet wat er precies fout....
gebruik een php editor! (bijv. Netbeans)
Toevoeging op 17/06/2016 20:02:33:
en aangepast.
Het vreemde is dat er drie testresultaten in de database staan, en de code geeft niets weer...
Kan het zijn dat er iets niet klopt aan de code?
Op een andere normale manier krijg ik de resultaten er wel uit...
Code (php)
- zet PHP foutmeldingen aan door het volgende boven in je script te plaatsen:
Gewijzigd op 17/06/2016 20:21:30 door Frank Nietbelangrijk
Nog even wat ophelderen: er is geen functioneel verschil tussen int(1) of int(11) of whatever je maar zou willen doen. Het getal staat voor padding, niet voor de grootte van het veld. Om ruimte in je database te besparen kun je het beste altijd de padding zo klein mogelijk houden.
Ben van Velzen op 17/06/2016 22:06:57:
Nog even wat ophelderen: er is geen functioneel verschil tussen int(1) of int(11) of whatever je maar zou willen doen. Het getal staat voor padding, niet voor de grootte van het veld. Om ruimte in je database te besparen kun je het beste altijd de padding zo klein mogelijk houden.
Het kan zijn dat ik het verkeerd lees, maar in je laatste zin lijk je te suggereren dat een int(11) meer opslagruimte zou kosten dan een int(1).
Voor de duidelijkheid: een integer kost altijd 4 bytes, ongeacht of het een int(1) is of een int(256). Die breedte/padding is alleen voor display-doeleinden, en eigenlijk nog het meest nuttig in combinatie met de optie zerofill. Het ontwikkelteam van MySQL zit er zelfs over te denken om die lengteaanduiding en de zerofill-optie deprecated te verklaren, omdat ze bij teveel gebruikers voor verwarring zorgen.
Als er een like knop onder jouw bericht zat dan zou je er een like bij hebben Willem. :-)
Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, resource given on line...
Gewijzigd op 19/06/2016 13:30:48 door Daan Vee
misschien kan je een var_dump($result); doen?