PHP, 2 verschillende tables vergelijken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi ik had een vraag over het uitlezen van 2 verschillende tables. het probleem zit namelijk zo :

Table 1 -> Staan alle buddy's

Table 2 -> Staan alle users in die online zijn op dit moment

nou heb ik een systeem gemaakt waar je zeg maar buddy's kan toevoegen op je member pagina, en leek he tmij een leuk iedee om dan ook te kunnen zien welke buddy's (andere members) online zijn.

het probleem is echter hoe kan ik de users die uit de voglende query komen :


<?
// $uid is de userid.

$select ="SELECT * FROM buddy WHERE lijst LIKE '$uid' ORDER BY id DESC";
$query = mysql_query($select);

while ($list = mysql_fetch_object($query)) {

//nou wil ik dat hier de vergelijking word gedaan van buddy's en mensen die online zijn

echo "<a href=profile.php?id=$list->buddyid>$list->buddy </a><BR>";

}

?>


Hoop dat jullie een beetje wijzer van worden maja zou alle hulp kunnen gebruiken

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
je zorgt dat je een array hebt met daarin de user-id's van buddy's en een array met de user-id's van de online members, en vervolgens doe je een array_intersect?

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
SQL:
1
2
3
4
SELECT b.*, o.buddy_id
FROM buddy b LEFT JOIN online_buddies o ON b.id = o.buddy_id
WHERE lijst LIKE '$uid'
ORDER BY id DESC

In deze query voer ik een LEFT JOIN uit op de online_buddies tabel. Als er een entry in zit (en de buddy dus online is) dan wordt buddy_id gevuld met het ID van je buddy. Zo niet, dat krijgt buddy_id de waarde null. Fijn om mee te controleren dacht ik zo.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit heb ik nu gedaan maar dat gaat niet helemaal goed :S kan iemand me een misschien vertellenw at hie rniet goed gaat ? ben ook nog neit echt een gevorderre, en kan ene hoop met php wa tik nodig heb maar dit is weer iets nieuws voor me.


$selecta1 ="SELECT * FROM buddy WHERE lijst LIKE '$uid' ORDER BY id DESC";
$querya1 = mysql_query($selecta1);

$selecta2 ="SELECT * FROM online ORDER BY id DESC";
$querya2 = mysql_query($selecta2);

while ($result = array_intersect($querya1, $querya2)) {
echo "$result->user_id"
}

Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik denk dat je dit wilt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

$allUsersQuery = "SELECT * FROM buddy WHERE lijst LIKE '$uid' ORDER BY id DESC";
$allUsersResult = mysql_query($allUsersQuery);
$allUserIDs = array();
while ( $record = mysql_fetch_assoc($allUsersResult) ) $allUsers[] = $record['id'];

$onlineQuery ="SELECT * FROM online ORDER BY id DESC";
$onlineResult = mysql_query($onlineQuery);
$onlineIDs = array();
while ( $record = mysql_fetch_assoc($onlineResult) ) $onlineIDs[] = $record['id'];

$onlineUserIDs = array_intersect($allUserIDs, $onlineIDs);

foreach ( $onlineUserIDs as $userID ) echo $userID;

?>

Maar toch is het niet wat je wilt, omdat het een vrij onzinnige constructie is. $onlineIDs en $onlineUserIDs bevatten zo namelijk dezelfde waarde (als het goed is).
Het zou dus hetzelfde als dit zijn:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

$onlineQuery ="SELECT * FROM online ORDER BY id DESC";
$onlineResult = mysql_query($onlineQuery);
$onlineIDs = array();
while ( $record = mysql_fetch_assoc($onlineResult) ) $onlineIDs[] = $record['id'];

foreach ( $onlineIDs as $userID ) echo $userID;

?>

Toch denk ik dat dit niet direct is wat je wilt. Mischien dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

$query = "
    SELECT b.*, IF(o.id IS NULL, 0, 1) as is_online
    FROM buddy b LEFT JOIN online o ON b.id = o.id
    WHERE b.lijst LIKE '$uid'
    ORDER BY b.id DESC
";
$result = mysql_query($query);
while ( $record = mysql_fetch_assoc($result) )
{
    echo "UserID ", $record['id'],
        " is ", ( $record['is_online'] == 1 ? "wel" : "niet" ), " online.<br/>";
}

?>

Dat haalt dus alle users op, en geeft per user aan of hij wel of niet online is, aan de hand van de is_online waarde dus.

In het kort wat jij fout deed. mysql_query geeft geen array terug, maar een mysql result. Daar kun je geen array_intersect op uitvoeren dus. array_intersect geeft zelf 1 array terug. while ( $result = ... ) zorgt er dus voor dat je over dat ene resultaat loopt. Bovendien is het geen object, zoals je nu in je code hebt, maar een array. Beter is dus om die array_intersect los uit te voeren, en dan over het resultaat te loopen (met een foreach bijvoorbeeld).

[ Voor 13% gewijzigd door Michali op 09-01-2006 19:27 ]

Noushka's Magnificent Dream | Unity