02. oktober 2008 - 03:16Der er
19 kommentarer og 1 løsning
Select fra flere databaser
Hej Eksperter.
Har et problem med denne query, den udskriver slet ingenting i mit while loop.
$query2 = mysql_query("SELECT * FROM friendlist, players WHERE friendlist.friendid='$_SESSION[user_id]' AND friendlist.id='$_SESSION[user_id]' AND friendlist.apply = '0' AND players.id = friendlist.friendid AND players.id = friendlist.id");
Hidtil har jeg kørt den i 2 forskellige querys og 2 forskellige while loops for at få det til at virke, men nu skal jeg til at bruge en ORDER BY, og så går det ikke længere at de er i 2 forskellige while loops.
Nej er ikke sikker, har ikke prøvet at bruge data fra flere databaser før, så er ikke sikker på hvordan det fungerer.
Sådan som jeg har det nu, hvor det kører i 2 forskellige querys ser de bare sådan her ud: $query2 = mysql_query("SELECT * FROM friendlist, players WHERE friendlist.id='$_SESSION[user_id]' AND friendlist.apply = '0' AND players.id = friendlist.friendid"); $query3 = mysql_query("SELECT * FROM friendlist, players WHERE friendlist.friendid='$_SESSION[user_id]' AND friendlist.apply = '0' AND players.id = friendlist.id"); Og så har jeg bare prøvet at samle det hele i en, som vist i topic, og det virker så ikke.
friendlist ______________________________ | id | frinedid | apply | mail | |____|__________|_______|______|
Og de er alle int.
Det jeg vil hive ud er alle de steder hvor ens id optræder på id's og friendid's plads, og så skal jeg bruge deres account navn, som står i databasen "players", og det henter jeg så via id'et fra friendlist.
Det virker ikke, for der er ingen steder hvor f.id = f.friendid, så ville man jo være venner med sig selv.
Jeg har siddet og leget lidt med det, men kan ikke få det til at virke, for man skal jo have den med at f.id = '$_SESSION[user_id]' AND f.friendid = '$_SESSION[user_id]' da ens eget ID nogle gange står på f.id's plads og andre gange på f.friendid's plads, men når man bruger AND på den måde vil den jo finde de rækker hvor ens eget ID står på begge pladser, og det gør den jo ikke nogle steder. Har også prøvet at bruge OR nogle forskellige steder, men det kan jeg heller ikke få til at virke? :/
fordi du i dine to queries havde skrevet, at både friendlist.friendid og friendlist.id skulle være lig $_SESSION[user_id] - ergo: f.id = $_SESSION[user_id] OG f.id = f.friendid
Måske du vil:
SELECT p.* FROM players AS p friendlist AS f WHERE f.id = p.id AND f.apply = 0 AND ( f.id = <<<$_SESSION[user_id]>>> OR p.id = <<<$_SESSION[user_id]>>> )
Det virker ikke, ændrede det sådan at det blev til: $query2 = mysql_query("SELECT * FROM players AS p, friendlist AS f WHERE f.apply = 0 AND (f.friendid = '$_SESSION[user_id]' OR f.id = '$_SESSION[user_id]') AND (p.id = f.friendid OR p.id = f.id)");
Det virker så at dem der ligger under f.id (og IKKE f.friendid) kommer frem, men alle links er med samme id. Ville lige tage med at det er sådan her jeg udskriver det:
SELECT p.id, p.accountname FROM players AS p friendlist AS f WHERE f.apply = 0 AND ( f.id = p.id OR f.friendid = p.id ) AND ( f.id = <<<$_SESSION[user_id]>>> OR p.id = <<<$_SESSION[user_id]>>> )
Du skal være OBS på, at da du i
$query2 = mysql_query("SELECT * FROM players AS p, friendlist AS f WHERE f.apply = 0 AND (f.friendid = '$_SESSION[user_id]' OR f.id = '$_SESSION[user_id]') AND (p.id = f.friendid OR p.id = f.id)");
selecter alt (*) fra BEGGE tabeller nok vil få noget rod med id-feltet. Hent derfor KUN hvad du skal bruge.
Så hvis vi siger at mit id er 1, så skal den kun udskrive id'et og navnet for id 9 og 10. Den eneste grund til at vi også henter players med i query'et, er for at få navnet på de id'er vi har fundet i friendlist.
Det virker lidt bedre, men der kommer ikke de venner der står på id's plads frem, og ens eget navn kommer ud ligeså mange gange som der er rækker hvor ens eget id står på.
SELECT p.id, p.accountname FROM friendlist AS f, players AS p WHERE f.apply = 0 AND ( f.id = <<<$_SESSION[user_id]>>> OR f.friendid = <<<$_SESSION[user_id]>>> ) AND IF(f.id = <<<$_SESSION[user_id]>>> f.friendid, f.id) = p.id
SELECT p.id, p.accountname FROM friendlist AS f, players AS p WHERE f.apply = 0 AND ( f.id = <<<$_SESSION[user_id]>>> OR f.friendid = <<<$_SESSION[user_id]>>> ) AND IF(f.id = <<<$_SESSION[user_id]>>>, f.friendid, f.id) = p.id
Hehe ja det så jeg godt efter jeg havde skrevet det. Ej for fanden hvor er det nice at det virker, det skal du have tusind tak for, har brugt sindsyg lang tid på at få det til at virke, så nu er jeg bare glad :D
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.