Door
Richard Bakker
op 14-06-2015 19:07
gewijzigd op 14-06-2015 19:33
1.331 views
Hallo allemaal,
Ik ben nieuw met php en databases. Nu dacht ik begrepen te hebben, door hier goed te lezen, hoe de syntax is.
Maar ik zit nu met een brandende vraag. Ik heb "stoel types" gedefinieerd, dit zijn gewoon kleuren overigens, en heb per type 20 stoelen in mijn database. Nu wil ik in php een lijst maken waar 10 random stoelen van hetzelfde type in zitten. Ik kreeg keer op keer dubbele stoelen in mijn lijst.
Nu hoop ik dit op te lossen door er twee queries van te maken. Eerst een random stoel, die in de array zetten. En vervolgens een loop dit nog 9 keer te doen maar dan met de voorwaarde dat het stoelnummer nog niet in de lijst mag staan. Nu is de vraag eigenlijk of iemand mij feedback kan geven over mijn benadering. Ik twijfel namelijk of het niet mogelijk is om met één query 10 verschillende stoelnummers te krijgen.
Hieronder staat mijn code.
Ik hoor graag wat van jullie
<?php
public function getStoel($stoeltype){
// hier haal ik een random stoel van het stoeltype wat is meegegeven op
$stoel = mysql_query("SELECT stoelnummer FROM stoel WHERE stoeltype = $stoeltype ORDER BY RAND() LIMIT 1");
// hier stop ik deze stoel in de tabel stoelen
$stoelen = ['$stoel'];
for($i = 1; $i <= 9; $i++)
// hier hoop ik 9x 1 random stoel toe te voegen van het stoeltype, maar met uitzondering van alle stoelnummers die al in de array zitten
{
$stoel = mysql_query("SELECT stoel FROM stoel WHERE stoeltype = $stoeltype AND stoelnummer != '$stoelnummer' ORDER BY RAND() LIMIT 1");
$stoelen [$i] = 'stoelnummer';
}
}
// ik wil op dit punt dus de array stoelen gevuld hebben met 10 stoelen
?>
Als stoelen in de tabel "stoel" uniek zijn doe je toch gewoon hetzelfde, maar dan met LIMIT 10?
m.a.w. 1 query met order by random() limit = 10 levert geen dubbele waardes op? het kan dan niet zo zijn dat de lijst vol komt met 3x stoelnummer 5 en 2x stoelnummer 1 en nog 5 andere stoelen?
m.a.w. 1 query met order by random() limit = 10 levert geen dubbele waardes op? het kan dan niet zo zijn dat de lijst vol komt met 3x stoelnummer 5 en 2x stoelnummer 1 en nog 5 andere stoelen?
Als stoelen in de tabel "stoel" uniek zijn niet.
Het lijkt mij sowieso niet zinnig om "dezelfde" stoel in zijn verschillende voorkomens (kleuren) op te slaan als aparte stoelen; het zijn uitvoeringen (combinaties) van hetzelfde ding. Dat zelfde ding moet uniek zijn.
Het lijkt mij sowieso niet zinnig om "dezelfde" stoel in zijn verschillende voorkomens (kleuren) op te slaan als aparte stoelen; het zijn uitvoeringen (combinaties) van hetzelfde ding. Dat zelfde ding moet uniek zijn.
Ah oke,.. nee maar dan kan je op deze manier een lijst van 10 willekeurige rode stoelen krijgen, of 10 willekeurige blauwe stoelen van een bepaald type materiaal bijvoorbeeld.
Maar dan kan ik de loop gewoon weglaten? dit:
$stoel = mysql_query("SELECT stoelnummer FROM stoel WHERE stoeltype = $stoeltype ORDER BY RAND() LIMIT 10");
$stoelen = ['$stoel'];
geeft dan een lijst stoelen met 10 unieke stoelen er in?
<?php
public function getStoelen($stoeltype)
{
// hier haal ik tien random stoelen van het stoeltype wat is meegegeven op
$stoelen = array();
$resultaat = mysql_query("SELECT stoelnummer FROM stoel WHERE stoeltype = $stoeltype ORDER BY RAND() LIMIT 10");
// We hebben nu een resultaat die FALSE is als de query mislukt is. Als de query geslaagd is dan bevat $resultaat een resource-id
if($resultaat)
{
// laten we nu de rijen ophalen
while($row = mysql_fetch_assoc($resultaat))
{
// voeg een element toe aan de array $stoelen
$stoelen[] = $row;
}
}
else
{
echo 'Er is iets misgegaan met de query: ' . mysql_error();
exit;
}
return $stoelen;
}
// ik wil op dit punt dus de array stoelen gevuld hebben met 10 stoelen
$stoelen = getStoelen('bureaustoel');
echo '<pre>';
print_r($stoelen);
echo '</pre>;
?>
Volgende punt is dat mysql_ functies verouderd zijn. Als je nu toch aan het leren bent zou ik voor willen stellen om de nieuwere mysqli_ functies te gaan gebruiken.
Ja dit is wel een hele mooie.
Dus als ik het dan goed heb, gebruik je hier fetch assoc omdat we enkel 2 waardes uit de rij halen van de database. Stel ik zou ze allemaal willen hebben, gebruik je fetch num row?
Iedereen bedankt voor de reacties. Ik ga hier verder mee aan de slag :)
Ga ik morgen het omgekeerde proberen, om deze array toe te voegen aan de database :)
mysql_num_rows (als je die bedoelt) geeft enkel het aantal rijen maar leest deze nog niet uit.
Je moet de rijen dus uitlezen als je de inhoud ervan wilt gebruiken. dit kan het beste (althans dat vind ik) met mysql_fetch_assoc. De assoc staat hier voor association of wel associatie. Hiermee krijg je een associatieve array terug. zoiets dus: