Avatar billede engberg Juniormester
11. juni 2006 - 19:40 Der er 6 kommentarer og
2 løsninger

Krydsreference i 2 tabeller

Hvordan checker jeg om der i tabel2 er et BrugerId der matcher Id i tabel1 ?

Tabel1
Id, Brugernavn

Tabel2
Id, BrugerId, Nyhed
Avatar billede nielle Nybegynder
11. juni 2006 - 20:19 #1
Rt det noget i denne stil du ønsker at kunne gøre?

$sql1 = "SELECT id, brugernavn FROM tabel1 ORDER BY brugernavn ASC";
$result1 = mysql_query($sql) or die(mysql_error());

while ($row1 = mysql_fetch_assoc($result1))
{
    echo "Brugeren " . $row1["brugernavn"] . " har skrevet ";

    $sql2 = "SELECT count(*) AS antal FROM tabel2 WHERE brugerid = " . $row1["id"];
    $result2 = mysql_query($sql2) or die(mysql_error());
    $antal = $row2["antal"];

    if ($antal == 1)
        echo "artikel";
    else
        echo "artikler";

    eche "<br>";
}
Avatar billede zynzz Praktikant
11. juni 2006 - 20:24 #2
$res1 = mysql_query("SELECT * FROM tabel1 WHERE brugerid = 'brugernavnet'");
$data = mysql_fetch_array($res1);
$res2 = mysql_query("SELECT * FROM tabel2 WHERE brugerid = '$data[brugernavn]'");
$number = mysql_num_rows($res2);
if($number == 1) { echo"Der i tabel2 er et BrugerId der matcher Id i tabel1"; }


Sådan vil jeg mene
Avatar billede nielle Nybegynder
11. juni 2006 - 20:56 #3
Det er temmeligt uøkonomisk at bruge mysql_num_rows() hvis man ikke alligevel skal bruge de data man trækker ud bagefter. Desuden bør man være meget påpasselig med at bruge SELECT * - i stedet bør man kun select'e på de felter man skal bruge.
Avatar billede wetdog Nybegynder
11. juni 2006 - 21:03 #4
man kunne vel også:

SELECT * FROM tabel2 INNER JOIN tabel1 ON tabel2.id = tabel1.id

og se om der kommer et resultat ud af det - eller ?
Avatar billede engberg Juniormester
11. juni 2006 - 22:38 #5
Det wetdog skriver lyder interessant... Hvordan fungerer det?

Jeg skal checke ca. 30 id's så det SKAL være "økonomisk"...
Avatar billede engberg Juniormester
11. juni 2006 - 23:37 #6
Hmm.. jeg overvandt problemet på en helt anden måde... så jeg har reelt set ikke brug for svaret, men mon ikke I alle 3 fortjener lidt - så smid svar og tak for hjælpen...
Avatar billede wetdog Nybegynder
12. juni 2006 - 13:03 #7
$sql1 = "SELECT * FROM tabel2 INNER JOIN tabel1 ON tabel2.brugerid = tabel1.id";
$result1 = mysql_query($sql) or die(mysql_error());

if(mysql_num_rows($result1)>0) {
  echo 'Resultat findes';
} else {
  echo 'Resultat findes ikke';
}

Jeg vil tro dette vil virke
Avatar billede nielle Nybegynder
12. juni 2006 - 18:43 #8
Jeg ved ikke om denne syntaks virker i MySQL, men i MS SQL giver den det rigtige resultat:

SELECT id, Brugernavn, (SELECT count(*) FROM tabel2 WHERE brugerid = tabel1.id)
FROM tabel1
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