while in while probleem
While1->while2(net zo vaak tot ie klaar is)->While1->While1->enz
iemand enig idee om te zorgen dat de 2e while gereset word waardoor ie elke keer dat de 1e while wordt uitgevoerd, ook word uitgevoerd?
Ik hoop dat het niet te verwarrend is :P
Groet,
Tim
Hangt van de voorwaarde van de while af. Als je het bijvoorbeeld met een teller doet moet je op het juiste moment de teller resetten. Laat wat code van while hier zien anders blijft het gissen.
Laat de relevante code eens zien.
while($row = mysql_fetch_array($query))
{
$isonline = 0;
echo "id: ". $row[id];
while($session = mysql_fetch_array($squery))
{
$userid = $session[userid];
echo "userid: ". $userid;
if($userid = $row[id])
{
$isonline = 1;
}
}
echo "<tr>";
echo "<td>" . $isonline . "</td>";
echo "<td>" . $row[id] . "</td>";
echo "<td>" . $row[username] . "</td>";
echo "</tr>";
}
echo "</table>";
En nu graag met de queries erbij.
// get info from the user
$db =& JFactory::getDBO();
$query = mysql_query("SELECT * FROM ".$db->nameQuote('jos_users')." ORDER BY ID");
// query the gathered info
$db->setQuery($query);
// spit out info needed to view the gathered info
$my = $db->loadObject();
// get online users
$sdb =& JFactory::getDBO();
$squery = mysql_query("SELECT * FROM ".$sdb->nameQuote('jos_session')." WHERE ".$db->nameQuote('guest')." =
".$db->quote('0')." ORDER BY userid
");
// query the gathered info
$sdb->setQuery($squery);
$smy = $sdb->loadObject();
Er staat géén query tussen de while()? Dan zal de binnenste while() alléén werken bij de eerste loop van de buitenste while(). Dit omdat er daarna geen verdere records meer zijn.
Dus, terug naar het begin: Wat is je probleem dat je probeert op te lossen met dit stuk code. Wat wil je maken?
In plaats van de dubbele while is hoogstwaarschijnlijk een inner join al de oplossing.
ok, ik probeer een ledenlijst te maken, waarbij je kunt zien wie er online is. Nu heb ik in mijn database 1 ledentabel, en 1 sessietabel. In die sessietabel worden alle leden weergegeven die online zijn. Nu wil ik zorgen dat ik die 2 tabellen met elkaar kan vergelijken zodat je niet meerdere keren 1 gebruiker in de lijst krijg. Ook moet ik rekening houden met eventuele gasten die er zijn, maar in de sessietabel word aangegeven of de persoon die online is een gast is of niet. Ik probeerde door middel van deze code dus elke id van de gebruiker in de gebruikerslijst, te vergelijken met de id van de online gebruiker. En daar loop ik dus steeds op vast.
Gooi je query dan eens op, er is al iets geroepen over JOINEN
// get info from the user
$db =& JFactory::getDBO();
$query = mysql_query("SELECT * FROM ".$db->nameQuote('jos_users')." ORDER BY ID");
// query the gathered info
$db->setQuery($query);
// spit out info needed to view the gathered info
$my = $db->loadObject();
// get online users
$sdb =& JFactory::getDBO();
$squery = mysql_query("SELECT * FROM ".$sdb->nameQuote('jos_session')." WHERE ".$db->nameQuote('guest')." =
".$db->quote('0')." ORDER BY userid
");
// query the gathered info
$sdb->setQuery($squery);
$smy = $sdb->loadObject();
Gewijzigd op 16/10/2010 20:34:45 door Noppes Homeland
SELECT * FROM ".$db->nameQuote('users')."
INNER JOIN id ON session.userid = users.userid
ORDER BY id
Is dit correct qua werking en hoe kan ik dit uiteindelijk gebruiken?
alvast bedankt
SELECT users.id, session.id
FROM ".$db->nameQuote('users')."
INNER JOIN session
ON users.id=session.userid
ORDER BY users.id
mocht dit alsnog verkeerd zijn: Wat is er verkeerd. Anders: ik heb nog nooit eerder met INNER JOIN gewerkt dus hoe zorg ik met deze query dat ik alle gegevens kan krijgen die ik wil? dus alle gebruikers en alle online gebruikers?
bedankt voor alle uitleg tot nu toe, ik denk dat dit zowiso nog wel van pas gaat komen :)
Toevoeging op 17/10/2010 11:53:30:
Heeft iemand een voorbeeld hoe ik met INNER JOIN kan werken binnen een script?
Heb even zitten prutsen en nu zie ik dat ik het beste LEFT JOIN kan gebruiken, aangezien ik zowiso alle rows van mijn eerste tabel wil laten weergeven. Ik heb het volgende geprobeerd maar ik krijg geen output, iemand een idee hoe dit komt?:
$query = mysql_query("SELECT jos_users.id, jos_users.username, jos_session.userid FROM ".$db->nameQuote('jos_users')."LEFT JOIN jos_session ON jos_user.id=jos_session.userid ORDER BY jos_users.id")
Gewijzigd op 17/10/2010 12:50:00 door thuron thuron
iemand?
Evalueert dat tot een gewone tabelnaam ??
$db->jos_users
maar dan krijg ik nog steeds niets. Ik heb hem ook in mijn database uitgevoerd als SQL:
SELECT *
FROM jos_users
LEFT JOIN jos_session ON jos_users.id = jos_session.userid
WHERE jos_session.userid IS NULL
LIMIT 0 , 30
en dan doet hij het wel. Het moet dan lijkt mij ergens fout gaan bij het pakken van de database of ergens een of ander stom foutje in de code. heb me al suf gezocht maar kan het niet vinden... heb het nu zo geprobeerd maar geen succes:
$query = mysql_query("SELECT * FROM $db->jos_users LEFT JOIN $db->jos_session ON $db->jos_users.id = $db->jos_session.userid WHERE $db->jos_session IS NULL")
Probeer de query eens als volgt:
Code (php)
1
2
3
4
2
3
4
<?php
$query = "SELECT veld1,veld2,veld3 FROM jos_users a, jos_session b WHERE a.id = b.userid";
mysql_query($query);
?>
$query = "SELECT veld1,veld2,veld3 FROM jos_users a, jos_session b WHERE a.id = b.userid";
mysql_query($query);
?>
Uitgangspunt is wel dat er dan in jos_session een record staat dat geldig is.
Gewijzigd op 18/10/2010 22:45:09 door Aad B
Ik zal het even proberen ik laat straks wel horen of het gelukt is. Dat IS NULL gebruik ik om te checken of de user bestaat in de sessies.