Rangschikken van datums in dropdownlist

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sebas V

Sebas V

01/02/2012 10:25:00
Quote Anchor link
Hallo,

ik heb een X aantal data die worden ingeladen vanuit een MySQL database in een dropdownlist. Echter deze data staan niet in de juiste oplopende volgorde.

Wie kan mij hiermee helpen?

Index.php
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<select name="datum" id="datum" class="inplaceError">
                <option value="">Selecteer uw voorkeursdatum..</option>
            <?php
                // Maak een array waar alle datums die WEL mogen in komen te staan :)
                $aDatums             = array();
                
                // Haal alle datums uit de DATUMS tabel
                $qQuery = 'SELECT * FROM datums';
                $mQuery = mysql_query($qQuery);
                
                // Haal alle data er 1 voor 1 uit
                while($fQuery = mysql_fetch_array($mQuery)){
                    
                    array_push($aDatums, $fQuery['dDatum']);
                    
                    // Doe nu een query naar het bepaalde item, als deze dus minder dan 20x voorkomt dan mag hij nog worden weergegeven anders niet
                    $qCheckRecords    = 'SELECT * FROM contact WHERE datum = "'.$fQuery['dDatum'].'"';
                    
                    $mCheckRecords    = mysql_query($qCheckRecords);
                    $fCheckRecords    = mysql_fetch_array($mCheckRecords);
                    $cCheckRecords    = mysql_num_rows($mCheckRecords);
                    
                    // Check of er minder dan * aantal in de DB staan
                    if($cCheckRecords < 4){
                        // Ik doe hier niets :[
                    } else {
                        $aDatums = array_diff($aDatums, array($fQuery['dDatum']));
                    }
                }

                
                
                // Parse alle data uit de array in de dropdown
                foreach($aDatums as $sData) {
                    echo '<option value="'.$sData.'">'.$sData.'</option>';
                }

            ?>

            </select>



DATUMS in Mysql Database
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
19
20
21
22
23
24
25
26
27
28
--
-- Tabel structuur voor tabel `datums`
--

CREATE TABLE IF NOT EXISTS `datums` (
  `dID` int(11) NOT NULL auto_increment,
  `dDatum` varchar(32) default NULL,
  PRIMARY KEY  (`dID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Gegevens worden uitgevoerd voor tabel `datums`
--

INSERT INTO `datums` (`dID`, `dDatum`) VALUES
(4, '23-03-2012'),
(3, '16-03-2012'),
(2, '09-03-2012'),
(1, '02-03-2012'),
(5, '30-03-2012'),
(6, '06-04-2012'),
(7, '13-04-2012'),
(8, '20-04-2012'),
(9, '27-04-2012'),
(10, '04-05-2012'),
(11, '11-05-2012'),
(12, '18-05-2012'),
(13, '25-05-2012');


:)
 
PHP hulp

PHP hulp

23/11/2024 10:01:14
 
Kees Schepers

kees Schepers

01/02/2012 10:30:55
Quote Anchor link
Je moet geen varchar gebruiken voor datum velden. Gebruik hiervoor DATE, DATETIME of TIMESTAMP in MySQL. Dan kun je vervolgens eenvoudig op datums sorteren. Gaat in MySQL ook veel sneller :)

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
19
--
-- Tabel structuur voor tabel `datums`
--

CREATE TABLE IF NOT EXISTS `datums` (
  `dID` int(11) NOT NULL auto_increment,
  `dDatum` DATE default NULL,
  PRIMARY KEY  (`dID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Gegevens worden uitgevoerd voor tabel `datums`
--

INSERT INTO `datums` (`dID`, `dDatum`) VALUES
(4, '2012-03-23'),
(3, '2012-03-16'),
(2, '2012-03-09'),
...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
                // Maak een array waar alle datums die WEL mogen in komen te staan :)
                $aDatums             = array();
                
                // Haal alle datums uit de DATUMS tabel
                $qQuery = 'SELECT DATE_FORMAT(dDatum, "%d-%m-%Y") as dDatum FROM datums ORDER BY datums.dDatum DESC';
                $mQuery = mysql_query($qQuery);
?>


Daar zal je al een heel eind mee moeten komen. verder vindt ik je code ingewikkeld voor wat je wilt doen maar ik heb helaas nu de tijd niet daar uitgebreid op in te gaan.

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
 
Roel -

Roel -

01/02/2012 10:32:29
Quote Anchor link
Zet bij je query op regel dit erachter: ORDER BY <veldnaam> ASC/DESC
Waarbij <veldnaam> nu datum is. Nu kies je of je de data oplopend (ASC) of aflopend (DESC) wilt sorteren.

Overigens snap ik regel 26-26 niet helemaal. Waarom doe je niet gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if ($cCheckRecords >= 4) {
    // ...
}
?>

?>
 
Sebas V

Sebas V

01/02/2012 10:55:59
Quote Anchor link
Bedankt beide voor jullie snelle reactie, echter bij de code van Kees Schepers verandert de datum nu in jaar-maand-dag.

Is het niet mogelijk deze op dag-maand-jaar te houden?
 
Erwin H

Erwin H

01/02/2012 11:07:17
Quote Anchor link
Nee, maar dat maakt niet uit, want hoe je het presenteert op je site bepaal je in php.
 
Kees Schepers

kees Schepers

01/02/2012 11:13:59
Quote Anchor link
Erwin H op 01/02/2012 11:07:17:
Nee, maar dat maakt niet uit, want hoe je het presenteert op je site bepaal je in php.


Of in MySQL door het gebruiken van de DATE_FORMAT functie ;) Zie mijn voorbeeld.
 
Sebas V

Sebas V

01/02/2012 11:15:59
Quote Anchor link
Thanks Erwin, idd, het werkt!

Bedankt voor de snelle response allen! :)

Toevoeging op 01/02/2012 11:16:33:

Kees Schepers op 01/02/2012 11:13:59:
Erwin H op 01/02/2012 11:07:17:
Nee, maar dat maakt niet uit, want hoe je het presenteert op je site bepaal je in php.


Of in MySQL door het gebruiken van de DATE_FORMAT functie ;) Zie mijn voorbeeld.


Idd, werkt beter zo! Thanks
 
Erwin H

Erwin H

01/02/2012 11:23:17
Quote Anchor link
Kees Schepers op 01/02/2012 11:13:59:
Erwin H op 01/02/2012 11:07:17:
Nee, maar dat maakt niet uit, want hoe je het presenteert op je site bepaal je in php.


Of in MySQL door het gebruiken van de DATE_FORMAT functie ;) Zie mijn voorbeeld.

Daar heb je gelijk in, ik was een beetje te snel met antwoorden. Ik ben er persoonlijk echter geen voorstander van omdat ik de data en presentatie gescheiden wil houden. De database bepaalt dus niet hoe gegevens op het scherm komen.
Maar dat is uiteraard een keuze en zeker geen noodzaak.
 
Kees Schepers

kees Schepers

01/02/2012 11:31:44
Quote Anchor link
Vindt het ook lastig, als ik werk zonder frameworks / ORM dan doe ik het zoveel mogelijk in MySQL, omdat MySQL hier simpelweg sneller in is als PHP en als ik gebruik maak van ORM (Doctrine2 in mijn geval) dan doe ik meer aan de PHP kant om ook database-vendor locking te voorkomen.
 



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.