meerdere rows output moet 1 worden
Nu heb ik in mijn database in het veld jaar de volgende waarders:
2010 - 2010 - 2011 - 2011 - 2011 - 2012
Mijn veld categorie heeft de volgende waarders:
Cat 1 - Cat 2 - Cat 1 - Cat 1 - Cat 2 - Cat 1
Met mijn SELECT query krijg ik als output in de Selectbox:
2012
2011
2011
2010
2010
Nu zou ik graag als output krijgen:
2012
2011
2010
Wat doe ik nu eigelijk verkeert.
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
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
<?php
define( 'DEBUG_MODE', false );
$query = "SELECT DISTINCT
jaar
FROM
promo
";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de Promo Jaar Archief gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
?>
<form id="aForm">
<select id="jaar" name="jaar" onchange="javascript: formget(this.form, 'include/promo_archief.php');">
<?php
while( $row = mysql_fetch_array( $result ) )
{
?>
<option value="<?php echo htmlspecialchars( $row['jaar'] ) ?>" ><?php echo htmlspecialchars( $row['jaar'] ) ?></option>
<?php
}
}
?>
define( 'DEBUG_MODE', false );
$query = "SELECT DISTINCT
jaar
FROM
promo
";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de Promo Jaar Archief gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
?>
<form id="aForm">
<select id="jaar" name="jaar" onchange="javascript: formget(this.form, 'include/promo_archief.php');">
<?php
while( $row = mysql_fetch_array( $result ) )
{
?>
<option value="<?php echo htmlspecialchars( $row['jaar'] ) ?>" ><?php echo htmlspecialchars( $row['jaar'] ) ?></option>
<?php
}
}
?>
Toevoeging op 02/01/2012 14:18:47:
O, en ook nog toevoegen ORDER BY jaar DESC
Dus: SELECT DISTINCT(jaar) FROM promo ORDER BY jaar DESC
Quote:
Dus: SELECT DISTINCT(jaar) FROM promo ORDER BY jaar DESC
Dit zal in principe op een mysql datbase dus een error moeten opleveren
let wel dat DISTINCT:
1. geen functie is zoals MAX/SUM enz de () behoren dus niet om het veld / velden gezet te worden
2. dat een DISTINCT genomen dient te worden over de gehele fieldset in de SELECT clause
3. dat DISTINCT in feite ook niet samengaat met een GROUP BY
Het voorbeeld wat Herman geeft werkt alleen op databases die afkomstig zijn van de makers van windows - in zovere ik dan weer weet -.
je bent op zoek naar:
Kwam er achter dat de manier van Noppes Homeland en Herman van Ree allebij wel werkte. Alleen krijg ik het vermoeden dat zonder de () net een fractie snelle is met pagina laden. Kan dit kloppen?
Wel rijst er een vraag omhoog.
Zodra ik als voorbeeld:
Dat ik dan weer de output krijg zoals in openings topic vermeld.
Kan ik met DISTINCT dan geen meerdere velden selecteren, of gaat dit dan weer op de manier van Herman van Ree.
Bedankt alvast voor het uitlegen van deze vraag.
Reden waarom ik DISTINCT() met haakjes dus gebruik; en in dit geval 'jaar' tussen de haakjes zou plaatsen.
Met enige verbazing zie ik dat in de Mysql-documentatie deze voor de hand liggende mogelijkheid (gebruik m al jaren) niet beschreven staat.
Toevoeging: ook weer niet zo gek, want Msyql is nogal buggy.
Als je bv. DISTINCT() niet als eerste veld in je query gebuikt, gaat de query in de helft van de gevallen fout...waarom ie soms goed gaat is me een raadsel. (ook waarom ie dan fout gaat trouwens)
Gewijzigd op 02/01/2012 19:10:03 door Herman van Ree
DISTINCT()
- MS Access
- MSQL Server
- PG
DISTINCT
- mysql
- ORACLE
Het is wel noodzakelijk dat de DISTINCT altijd direct volgt op de SELECT het bepaald immers wat uniek moet zijn.
Maar wat is nu eigenlijk je uiteindelijke doel?
Herman van Ree op 02/01/2012 18:59:50:
DISTINCT moet meteen achter de SELECT, waarom dan verbaasd zijn wanneer je niet volgens de (ANSI) SQL regels codeert maar zomaar wat "probeert". DISTINCT en GROUP BY worden veel te veel gebruikt om modellerings problemen weg te poetsen in plaats van het doel waar ze daadwerkelijk voor bedoeld zijn. "Probeer" eens een SQL cursus.Als je bv. DISTINCT() niet als eerste veld in je query gebuikt, gaat de query in de helft van de gevallen fout...waarom ie soms goed gaat is me een raadsel. (ook waarom ie dan fout gaat trouwens)
Noppes Homeland wat ik probeer te bereiken is dat de select query mij alleen de jaartallen terug geeft die in de database staan. Als ik dus 2x 2010, 3x 2011 en 1x 2012 heb, wil ik dat mijn selectbox alle 3 jaren enkel weer geeft als output.
Dit heb ik kunnen bereiken door de eerder genoemde query.
Alleen vroeg ik mij af hoe het met die DISTINCT ging als ik nog een extra veld wil aanroepen in de query. Gaat deze extra veld dan ook door de DISTINCT of valt deze er dan buiten en doet hij dat alleen op de eerste aangegeven veld zoals in mijn voorbeeld jaar.
Een andere mogelijkheid om dit te krijgen is natuurlijk ook welkom.
Ben hier om te leren dus alle mogelijke betere oplossingen zijn welkom.
dus als je hebt
2010 A
2010 A
2010 B
2011 A
2011 A
select distinct jaar, flop from eentabel order by jaar,flop
resultaat
2010 A
2010 B
2011 A
want dat zijn dan de uniek combinaties
Oke voor mij is deze uitleg duidelijk.
Het komt er dus op neer als je nog enkele velden extra wilt selecteren, dient er een extra query gedraait te worden.
Leden bedankt voor reactie het is mij duidelijk, ik kan even weer verder.