2013-01-21 8 views
5

Oto, co chciałbym zrobić. Mam dwie tabele w sql Chciałbym powtórzyć wszystkie wiadomości i nazwę użytkownika nadawcy wiadomości.php sql łączący klucze podstawowe i zagraniczne (powiązane listy)

Oto jak konfiguruje się tabele.

table name: user 
user_id user_name 
    1  abc 
    2  bob 
    3  pqr 


table2 name : message 
intro_id  user_id  msg 
    1    4   abc 
    2    4   jkl 
    3    2   cbd 

pożądany wynik byłby jak ten

nowego abc

nowe JKL

bob CBD

Mój kod do tej pory wyłącznie wyjście komunikaty

$result = mysql_query("SELECT * FROM message"); 

while($row = mysql_fetch_array($result)) 
    { 
    echo $row['msg'] ; 
    } 
+1

Chociaż to pytanie jestem pewien zostało odebrane milion razy +1 dla tabel wizualizacje – user1775570

Odpowiedz

4

Spróbuj zapytanie do uzyskania USER_NAME

mysql_query("SELECT user.user_name, message.msg FROM message INNER JOIN user ON message.user_id = user.user_id"); 
while($row = mysql_fetch_array($result)) 
{ 
    echo $row['user_name'] . ": " . $row['msg'] ; 
} 
+0

Dziękuję za odpowiedź. Czy wiesz, czy twoja metoda lub inna odpowiedź od CoBolt jest bardziej wydajna? jeśli tak, proszę wyjaśnij! – ramr

+1

Jest to absolutnie równoważny, dałem ci standardowy sposób pisania złączeń, proszę spojrzeć na http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join i być świadomym indeksu na 'message.user_id' , poprawi wydajność, gdy dostaniesz dużo nagrań wewnątrz 'message'. – Igor

4
$result = mysql_query("SELECT user.user_name,message.msg FROM user,message WHERE user.user_id=message.user_id"); 

while($row = mysql_fetch_array($result)) 
    { 
    echo $row['user_name']." ".$row['msg']; 
    } 

to powinno działać.

Proszę komentować, jeśli nie robi

Powiązane problemy