Rangschikken van datums in dropdownlist
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)
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
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>
<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)
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
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');
-- 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');
:)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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'),
...
-- 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)
1
2
3
4
5
6
7
8
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);
?>
// 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
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:
?>
Is het niet mogelijk deze op dag-maand-jaar te houden?
Nee, maar dat maakt niet uit, want hoe je het presenteert op je site bepaal je in php.
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.
Bedankt voor de snelle response allen! :)
Toevoeging op 01/02/2012 11:16:33:
Kees Schepers op 01/02/2012 11:13:59:
Of in MySQL door het gebruiken van de DATE_FORMAT functie ;) Zie mijn voorbeeld.
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
Kees Schepers op 01/02/2012 11:13:59:
Of in MySQL door het gebruiken van de DATE_FORMAT functie ;) Zie mijn voorbeeld.
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.
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.