Avatar billede Slettet bruger
03. februar 2011 - 21:03 Der er 2 kommentarer og
1 løsning

Problemer med join inner

Har følgende 2 tabeller i min database:

bruger:
[brugerid][brugernavn]

bgame
[id][user1][user2][point1][point2]

User1 og User2 er brugernes id.

Jeg vil gerne lavet et udtræk hvor id'erne bliver afløst af brugerens navn.

Jeg ved man kan gøre det med et brugernavn.
Men hvordan gør man det med 2?

Sådan gør jeg det med 1, men mangler stadig $name2:

<?

$result = mysql_query("SELECT * FROM bgame INNER JOIN bruger ON userid=user1 ORDER BY runde DESC") or die(mysql_error());
while ($row = mysql_fetch_array($result))
{
$name= $row['brugernavn'];
///$name2= ???;
echo "<input type='text' value='$name'><input type='text' value='".$row['point1']."'><input type='text' value='".$row['point2']."'><input type='text' value='$name2'>";
}

?>
Avatar billede Slettet bruger
03. februar 2011 - 21:05 #1
Lavede lige en fejl.
der står userid i min ene linje. Det skal være brugerid.
04. februar 2011 - 06:29 #2
Fordi du skal hente to brugernavne fra bruger skal du joine bgame med bruger to gange og skal du give bruger tabellen to forskellige 'alias'er, saaledes:

SELECT id, b1.brugernavn AS bruger1, point1, b2.brugernavn AS bruger2, point2 FROM ddd_bgame JOIN ddd_bruger b1 ON user1 = b1.brugerid JOIN ddd_bruger b2 ON user2 = b2.brugerid ORDER BY id

(Du vil 'ORDER BY runde', men jeg ser ingen runde, saa jeg ORDER BY id.)

Det kan du vise paa siden saaledes:

$result = mysql_query("SELECT id, b1.brugernavn AS bruger1, point1, b2.brugernavn AS bruger2, point2 FROM ddd_bgame JOIN ddd_bruger b1 ON user1 = b1.brugerid JOIN ddd_bruger b2 ON user2 = b2.brugerid ORDER BY id")or die(mysql_error());

while($row = mysql_fetch_array($result))
{
  $id = $row['id'];
  $bruger1 = $row['bruger1'];
  $point1 = $row['point1'];
  $bruger2 = $row['bruger2'];
  $point2 = $row['point2'];
  echo "<input type='text' value=$id><input type='text' value=$bruger1><input type='text' value=$point1><input type='text' value=$bruger2><input type='text' value=$point2><br>";
}

Fordi det er nogen tid siden jeg har vaeret inde i det dobbelte join testede jeg det paa denne side: http://christianjorgensen.be/ddd1.php og med disse tabeller:

CREATE TABLE ddd_bruger(brugerid INT, brugernavn VARCHAR(10));

INSERT INTO ddd_bruger VALUES(1, 'bruger1');
INSERT INTO ddd_bruger VALUES(2, 'bruger2');
INSERT INTO ddd_bruger VALUES(3, 'bruger3');
INSERT INTO ddd_bruger VALUES(4, 'bruger4');
INSERT INTO ddd_bruger VALUES(5, 'bruger5');

CREATE TABLE ddd_bgame(id INT, user1 INT, user2 INT, point1 INT, point2 INT);

INSERT INTO ddd_bgame VALUES(1, 1, 2, 11, 12);
INSERT INTO ddd_bgame VALUES(2, 2, 4, 13,14);
INSERT INTO ddd_bgame VALUES(3, 5, 1, 15,15);

(Jeg sparer at skrive 'INNER JOIN' fordi mysql automatisk laver INNER JOIN med mindre man specificerer 'LEFT JOIN' eller 'RIGHT JOIN'.)
Avatar billede Slettet bruger
04. februar 2011 - 10:46 #3
Super godt.

Så lærte jeg også det med man bare kan skrive join.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester