while in while probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Thuron thuron

thuron thuron

15/10/2010 22:22:32
Quote Anchor link
ik heb een while in een while gemaakt, maar nu word de while die IN de andere while staat, maar 1x volledig(dus hij gaat er net zo vaak doorheen tot ie klaar is) uitgevoerd en niet 1x per keer dat de eerste while word uitgevoerd. Hij doet dit zegmaar:

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
 
PHP hulp

PHP hulp

05/11/2024 15:41:29
 
Aad B

Aad B

15/10/2010 22:24:38
Quote Anchor link
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.
 
- SanThe -

- SanThe -

15/10/2010 22:30:31
Quote Anchor link
Laat de relevante code eens zien.
 
Thuron thuron

thuron thuron

15/10/2010 22:51:13
Quote Anchor link
De code:

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>";
 
Pim -

Pim -

15/10/2010 22:59:36
Quote Anchor link
En nu graag met de queries erbij.
 
Thuron thuron

thuron thuron

15/10/2010 23:05:18
Quote Anchor link
Hier zijn de query's:


// 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();
 
- SanThe -

- SanThe -

15/10/2010 23:37:43
Quote Anchor link
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.
 
Jelmer -

Jelmer -

16/10/2010 00:27:28
Quote Anchor link
Een while binnen een while-lus is bijna gegarandeerd langzaam, zeker als je binnen in een van die lussen nog queries gaat uitvoeren (queries zijn langzaam) En eigenlijk is het nooit nodig, je datbase kan heel veel trucjes om het niet nodig te maken.

Dus, terug naar het begin: Wat is je probleem dat je probeert op te lossen met dit stuk code. Wat wil je maken?
 
Aad B

Aad B

16/10/2010 17:10:46
Quote Anchor link
In plaats van de dubbele while is hoogstwaarschijnlijk een inner join al de oplossing.
 
Thuron thuron

thuron thuron

16/10/2010 20:01:43
Quote Anchor link
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.
 
Noppes Homeland

Noppes Homeland

16/10/2010 20:19:57
Quote Anchor link
Gooi je query dan eens op, er is al iets geroepen over JOINEN
 
Thuron thuron

thuron thuron

16/10/2010 20:27:18
Quote Anchor link
had ze eerder al genoemd, maar hier zijn ze nog een keer:

// 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();
 
Noppes Homeland

Noppes Homeland

16/10/2010 20:34:16
Quote Anchor link
Ja daar vroeg ik dus niet om, en heb je nu ook al geprobeerd om die 2 queries tot 1 terug te brengen?
Gewijzigd op 16/10/2010 20:34:45 door Noppes Homeland
 
Thuron thuron

thuron thuron

16/10/2010 21:00:55
Quote Anchor link
ok heb nu dit:

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
 
Noppes Homeland

Noppes Homeland

16/10/2010 21:10:24
 
Thuron thuron

thuron thuron

16/10/2010 21:32:47
Quote Anchor link
dank voor je link. heb even gekeken en kom dan uiteindelijk op dit uit:

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
 
Thuron thuron

thuron thuron

18/10/2010 21:56:38
Quote Anchor link
iemand?
 
Aad B

Aad B

18/10/2010 22:07:40
Quote Anchor link
Wat is dit in de FROM: ".$db->nameQuote('jos_users')." ??
Evalueert dat tot een gewone tabelnaam ??
 
Thuron thuron

thuron thuron

18/10/2010 22:33:53
Quote Anchor link
ja. heb zojuist even geprobeerd zonder de namequotes:

$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")
 
Aad B

Aad B

18/10/2010 22:41:06
Quote Anchor link
Om te beginnen is de query fout: WHERE jos_session.userid IS NULL kan nooit goed zijn lijkt mij. Verder snap ik weinig van je $db-> gedoe. Is dat nodig ?
Probeer de query eens als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$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
 
Thuron thuron

thuron thuron

18/10/2010 22:57:21
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.