Sorteren op datum

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daan Vee

Daan Vee

17/06/2016 18:12:50
Quote Anchor link
Ik heb een tabel met meldingen en datums erbij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;


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
 
PHP hulp

PHP hulp

26/04/2024 13:30:30
 
Ward van der Put
Moderator

Ward van der Put

17/06/2016 18:42:18
Quote Anchor link
Met `time` int(1) NOT NULL voor de datum en tijd gaat dat niet lukken.

Is dit de databasestructuur die je echt gebruikt of heb je die voor de vraag vereenvoudigd?
 
Daan Vee

Daan Vee

17/06/2016 19:15:19
Quote Anchor link
Nee, dit INT is 11 inderdaad... typfoutje...
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/06/2016 19:36:10
Quote Anchor link
Aanname: je gebruikt een timestamp als datum? (waarom gebruik je niet gewoon DATETIME of TIMESTAMP ipv INT?)

Je moet dus een nieuw kopje maken als we in een andere dag terecht komen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}

?>
Gewijzigd op 17/06/2016 20:02:07 door Frank Nietbelangrijk
 
Daan Vee

Daan Vee

17/06/2016 19:54:19
Quote Anchor link
Ik krijg een foutmelding op lijn 9, maar ik zie niet wat er precies fout....
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/06/2016 20:01:51
Quote Anchor link
haakje vergeten :-)
gebruik een php editor! (bijv. Netbeans)

Toevoeging op 17/06/2016 20:02:33:

en aangepast.
 
Daan Vee

Daan Vee

17/06/2016 20:14:27
Quote Anchor link
Dank!
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...
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/06/2016 20:19:24
Quote Anchor link
- Je moet nog wel even connecten met de database host.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$con
= mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

if(!$con)
{

    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo mysqli_connect_error() . PHP_EOL;
    exit;
}

?>



- zet PHP foutmeldingen aan door het volgende boven in je script te plaatsen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
Gewijzigd op 17/06/2016 20:21:30 door Frank Nietbelangrijk
 
Ben van Velzen

Ben van Velzen

17/06/2016 22:06:57
Quote Anchor link
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.
 
Willem vp

Willem vp

18/06/2016 15:29:40
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/06/2016 15:31:39
Quote Anchor link
Als er een like knop onder jouw bericht zat dan zou je er een like bij hebben Willem. :-)
 
Daan Vee

Daan Vee

19/06/2016 13:30:01
Quote Anchor link
De foutmelding die ik nog krijg:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, resource given on line...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
while($row = mysqli_fetch_assoc($result))
Gewijzigd op 19/06/2016 13:30:48 door Daan Vee
 
Fabian webstars

Fabian webstars

19/06/2016 17:06:07
Quote Anchor link
misschien kan je een var_dump($result); doen?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.