dubbele gegevens uit db 1 keer printen.
De zoekfunctie bestaat uit een dropdownmenu waar een merk gekozen moet worden en een zoekveldje.
De database bestaat uit 1 tabel met de naam producten. Er is een kolom die heet merk en hier staan dus de merken van de producten in.
Het dropdownmenu moet gevuld worden met de merken uit de kolom merk.
Maar daar staan de merken tientallen keren in, hoe kan ik er voor zorgen dat elk merk maar één keer geprint word?
Ik hoop dat ik de oplossing snel krijg omdat het deze dagen af moet zijn.
Alvast bedankt! En ik zou het fijn vinden als je het met een voorbeeldscriptje duidelijk wilt maken hoe ik dit aan moet pakken.
Groeten Leendert
SELECT DISTINCT veld FROM tabel WHERE veld = waarde
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$query = "SELECT DISTINCT merk FROM producten";
$do = mysql_query($query);
while($restultaat = mysql_fetch_array($do)) {
echo $resultaat['merk'] . "<br />";
}
?>
$query = "SELECT DISTINCT merk FROM producten";
$do = mysql_query($query);
while($restultaat = mysql_fetch_array($do)) {
echo $resultaat['merk'] . "<br />";
}
?>
SELECT DISTINCT betekent, selecteer alleen de unieke waarden:
http://www.webdevelopersnotes.com/tutorials/sql/online_mysql_guide_the_distinct_keyword.php3
dan doe je je query, en vervolgens met een while loop,
loop je alle merken af, en echo't die + (wat in php een . is) een <br> wat inhoudt, dat er een nieuwe regel gemaakt wordt.
dus het volgende wordt het ongeveer in je html body:
philips<br>
sony<br>
panasonic<br>
enz...
Succes!
Groet,
Barry
Zo gaat het lukken :)
Quote:
Dan is het datamodel verkeerd, één gegeven (in dit geval het merk) sla je slechts 1x op.De database bestaat uit 1 tabel met de naam producten. Er is een kolom die heet merk en hier staan dus de merken van de producten in.
Ga normaliseren en maak een aparte tabel aan om de merken in te zetten. Dan kun je nooit meer met dubbele (reduntante) data komen te zitten. Dit voorkomt een hele berg problemen.
Dus terug naar de tekentafel!
Frank schreef op 09.01.2007 16:44:
Ga normaliseren en maak een aparte tabel aan om de merken in te zetten. Dan kun je nooit meer met dubbele (reduntante) data komen te zitten. Dit voorkomt een hele berg problemen.
Dus terug naar de tekentafel!
Quote:
Dan is het datamodel verkeerd, één gegeven (in dit geval het merk) sla je slechts 1x op.De database bestaat uit 1 tabel met de naam producten. Er is een kolom die heet merk en hier staan dus de merken van de producten in.
Ga normaliseren en maak een aparte tabel aan om de merken in te zetten. Dan kun je nooit meer met dubbele (reduntante) data komen te zitten. Dit voorkomt een hele berg problemen.
Dus terug naar de tekentafel!
Dan moet je toch joinen later?
Frank schreef op 09.01.2007 16:44:
Ga normaliseren en maak een aparte tabel aan om de merken in te zetten. Dan kun je nooit meer met dubbele (reduntante) data komen te zitten. Dit voorkomt een hele berg problemen.
Dus terug naar de tekentafel!
Quote:
Dan is het datamodel verkeerd, één gegeven (in dit geval het merk) sla je slechts 1x op.De database bestaat uit 1 tabel met de naam producten. Er is een kolom die heet merk en hier staan dus de merken van de producten in.
Ga normaliseren en maak een aparte tabel aan om de merken in te zetten. Dan kun je nooit meer met dubbele (reduntante) data komen te zitten. Dit voorkomt een hele berg problemen.
Dus terug naar de tekentafel!
In dit geval is dit de beste oplossing, de persoon ontvangt elke dag een .cvs bestand van de distributeur met alle producten er in. Hij moet de gegevens uit dit nieuwe bestand zo snel mogelijk in de database kunnen zetten. De producten worden dus elke dag opnieuw in de database gezet.
Code (php)
1
2
3
4
2
3
4
<?php
$query = "SELECT DISTINCT merk FROM producten";
$do = mysql_query($query) or die("Er is iets fout gegaan!");
?>
$query = "SELECT DISTINCT merk FROM producten";
$do = mysql_query($query) or die("Er is iets fout gegaan!");
?>
<center>
<form action="producten.php" method="post">
<select name="merk">
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
while($restultaat = mysql_fetch_array($do)) {
print'<option value='.$resultaat["merk"].'>'.$resultaat["merk"].'</option>';
}
?>
while($restultaat = mysql_fetch_array($do)) {
print'<option value='.$resultaat["merk"].'>'.$resultaat["merk"].'</option>';
}
?>
</select>
</form>
</center>
het dropdown-veldje blijft leeg....Terwijl er wel producten in de database staan. Er is al verbinding met de database gelegd in het het script voor het gedeelte wat je nu ziet, verbinding is goed want ik kan printen uit de database.
dit neer te zetten:
or die(mysql_error());
Kijken wat voor fout die geeft...
Barry
Barry schreef op 09.01.2007 17:07:
probeer eens bij or die
dit neer te zetten:
or die(mysql_error());
Kijken wat voor fout die geeft...
Barry
dit neer te zetten:
or die(mysql_error());
Kijken wat voor fout die geeft...
Barry
Hij geeft geen fout...
maar zit de fout misschien in deze tekens: ' en "
Gewijzigd op 01/01/1970 01:00:00 door leendert
en dit:
print'<option value='.$resultaat["merk"].'>'.$resultaat["merk"].'</option>';
naar dit veranderen:
echo "<option value=" . $resultaat['merk'] . ">" . $resultaat['merk'] . "</option>";
werkt dat?
(ja ik ben niet goed in debuggen, dat weet ik...)
Barry
Barry schreef op 09.01.2007 17:13:
ok
en dit:
print'<option value='.$resultaat["merk"].'>'.$resultaat["merk"].'</option>';
naar dit veranderen:
echo "<option value=" . $resultaat['merk'] . ">" . $resultaat['merk'] . "</option>";
werkt dat?
(ja ik ben niet goed in debuggen, dat weet ik...)
Barry
en dit:
print'<option value='.$resultaat["merk"].'>'.$resultaat["merk"].'</option>';
naar dit veranderen:
echo "<option value=" . $resultaat['merk'] . ">" . $resultaat['merk'] . "</option>";
werkt dat?
(ja ik ben niet goed in debuggen, dat weet ik...)
Barry
geeft ook een leeg dropdown-veldje......maar ook geen foutmeldingen ;)
Gewijzigd op 01/01/1970 01:00:00 door leendert
dus zoals in mijn voorbeeldje ^^^^^^
Doet ie dan ook nix?
en probeer ff bovenaan je pagina dit te zetten:
(kijken of dat wat zegt)
Gewijzigd op 01/01/1970 01:00:00 door Barry
Barry schreef op 09.01.2007 17:19:
Probeer 't gewoon es te echo'en...
dus zoals in mijn voorbeeldje ^^^^^^
Doet ie dan ook nix?
en probeer ff bovenaan je pagina dit te zetten:
(kijken of dat wat zegt)
dus zoals in mijn voorbeeldje ^^^^^^
Doet ie dan ook nix?
en probeer ff bovenaan je pagina dit te zetten:
(kijken of dat wat zegt)
okej
dan krijg ik een hele pagina vol met deze foutcode:
Notice: Undefined variable: resultaat in c:\program files\easyphp1-8\www\test\formulier.php on line 10
En dat is dus deze regel: echo $resultaat['merk'] . "<br />";
Gewijzigd op 01/01/1970 01:00:00 door leendert
heel stom
resultaat
restultaat
bij while is het restultaat
verkeerde 't' dus...
nu moet het ook met je checkboxes werken...
en als je dus klaar bent met het scripten, haal dan error_reporting weer weg...
Barry
Gewijzigd op 01/01/1970 01:00:00 door Barry
Barry schreef op 09.01.2007 17:25:
ik zie 'm al
heel stom
resultaat
restultaat
bij while is het restultaat
verkeerde 't' dus...
Barry
heel stom
resultaat
restultaat
bij while is het restultaat
verkeerde 't' dus...
Barry
hahahahahahaha waarom altijd zulke foutjes waar je soms uren naar zit te zoeken :(
Dat is de fout :) nu werkt het!
Bedankt voor je hulp!
succes verder!
Groet,
Barry
Edit:
Als er nog meer foutmeldingen verschenen behalve die je post'te, dan kun je daar ook altijd vragen over stellen...
Gewijzigd op 01/01/1970 01:00:00 door Barry
Quote:
Ja, en? Omdat de gegevens op een bepaalde manier worden aangeleverd, ga jij het op een verkeerde manier in de database opslaan? Jij moet er gewoon voor zorgen dat de data op de juiste plek wordt opgeslagen, in dit geval betekent dit dat je de merken in een aparte tabel gaat opslaan.In dit geval is dit de beste oplossing, de persoon ontvangt elke dag een .cvs bestand van de distributeur met alle producten er in. Hij moet de gegevens uit dit nieuwe bestand zo snel mogelijk in de database kunnen zetten. De producten worden dus elke dag opnieuw in de database gezet.
Dit heeft echt 10x niks te maken met de manier waarop het wordt aangeleverd.
Iedere dag alles opnieuw in de database wegschrijven is overigens ook niet bijzonder slim. Zolang de data hetzelfde is, is er niet 1 reden om de oude weg te gooien en deze data opnieuw in de database weg te schrijven. Je zou zelfs met een INSERT ... ON DUPLICATE KEY UPDATE bv. alleen datumtijd-stempel kunnen updaten om zo bij te houden wanneer iets voor het laatst is gecontroleerd. Gebruik een UNIQUE op alle velden om deze check te kunnen gebruiken.
Jouw huidige aanpak is in elk geval niet handig en/of efficient, laat staan dat het ook maar iets met een relationele database heeft te maken.
Frank schreef op 09.01.2007 18:14:
Dit heeft echt 10x niks te maken met de manier waarop het wordt aangeleverd.
Iedere dag alles opnieuw in de database wegschrijven is overigens ook niet bijzonder slim. Zolang de data hetzelfde is, is er niet 1 reden om de oude weg te gooien en deze data opnieuw in de database weg te schrijven. Je zou zelfs met een INSERT ... ON DUPLICATE KEY UPDATE bv. alleen datumtijd-stempel kunnen updaten om zo bij te houden wanneer iets voor het laatst is gecontroleerd. Gebruik een UNIQUE op alle velden om deze check te kunnen gebruiken.
Jouw huidige aanpak is in elk geval niet handig en/of efficient, laat staan dat het ook maar iets met een relationele database heeft te maken.
Quote:
Ja, en? Omdat de gegevens op een bepaalde manier worden aangeleverd, ga jij het op een verkeerde manier in de database opslaan? Jij moet er gewoon voor zorgen dat de data op de juiste plek wordt opgeslagen, in dit geval betekent dit dat je de merken in een aparte tabel gaat opslaan.In dit geval is dit de beste oplossing, de persoon ontvangt elke dag een .cvs bestand van de distributeur met alle producten er in. Hij moet de gegevens uit dit nieuwe bestand zo snel mogelijk in de database kunnen zetten. De producten worden dus elke dag opnieuw in de database gezet.
Dit heeft echt 10x niks te maken met de manier waarop het wordt aangeleverd.
Iedere dag alles opnieuw in de database wegschrijven is overigens ook niet bijzonder slim. Zolang de data hetzelfde is, is er niet 1 reden om de oude weg te gooien en deze data opnieuw in de database weg te schrijven. Je zou zelfs met een INSERT ... ON DUPLICATE KEY UPDATE bv. alleen datumtijd-stempel kunnen updaten om zo bij te houden wanneer iets voor het laatst is gecontroleerd. Gebruik een UNIQUE op alle velden om deze check te kunnen gebruiken.
Jouw huidige aanpak is in elk geval niet handig en/of efficient, laat staan dat het ook maar iets met een relationele database heeft te maken.
Ik zet de data er niet elke dag erin maar de persoon waar ik dit voor maakt, het moet dus zo simpel mogelijk zijn. Met een paar klikken moet hij klaar zijn omdat er anders elke dag weer teveel werktijd hier aan verloren gaat.
Hij kan de producten heel simpel en snel in de database zetten door het .cvs bestandje te uploaden en de rest gaat automatisch.
En er zit echt elke dag veel verschil in de lijst, hij levert namelijk hardware aan allerlei bedrijven, en daar verschillen de prijzen echt elke dag.
Ik zou niet weten hoe ik het anders kan doen. Omdat er dan allerlei scripts op het cvs bestand los gelaten moet worden, en dat is me te ingewikkeld.
Ik zie dat gewoon niet zitten.
Quote:
Jouw script schrijft de boel weg in de database, dat doe je niet met het handje. Jij moet er dus voor zorgen dat jouw script dit op de juiste manier doet, anders ga je gegarandeerd problemen krijgen.Ik zet de data er niet elke dag erin maar de persoon waar ik dit voor maakt, het moet dus zo simpel mogelijk zijn. Met een paar klikken moet hij klaar zijn omdat er anders elke dag weer teveel werktijd hier aan verloren gaat.
Heeft dus niks te maken met het kennis-niveau van de gebruiker.
Frank schreef op 09.01.2007 19:21:
Heeft dus niks te maken met het kennis-niveau van de gebruiker.
Quote:
Jouw script schrijft de boel weg in de database, dat doe je niet met het handje. Jij moet er dus voor zorgen dat jouw script dit op de juiste manier doet, anders ga je gegarandeerd problemen krijgen.Ik zet de data er niet elke dag erin maar de persoon waar ik dit voor maakt, het moet dus zo simpel mogelijk zijn. Met een paar klikken moet hij klaar zijn omdat er anders elke dag weer teveel werktijd hier aan verloren gaat.
Heeft dus niks te maken met het kennis-niveau van de gebruiker.
dus dan moet ik dat hele bestandje gaan ontleden en naar allerlei tabellen weg schrijven? Dat zie ik echt niet zitten.