webForumDet fria alternativet

Hämta från två tabeller

PHP

8 svar · 402 visningar · startad av bionic

Medlem sedan sep. 200347 inlägg
Frågan#1

Hej.
Jag har ett nyhetsscript som använder 2 tabeller, tNews och tUsers.

från tNews använder jag ID News Author och Date, där Author är användarens id i tUser-tabellen. Det jag behöver hjälp med är att skriva ut användarnamnet som hör till det ID:t. Kolumnen heter cUser och ligger i tUsers.

Kanske blev dåligt förklarat men någon förstår nog :)

Medlem sedan nov. 2001274 inlägg
#2

Jag gör ett försök. Nu vet jag inte vad dina fält i tabellen tusers heter, men jag använder id och username i mitt exempel.

$sql = "select n.id, n.news, n.author, n.date, u.username from tnews as n left outer join tusers as u on n.author = u.id";
$result = mysql_query($sql);

while ($array = mysql_fetch_assoc($result)) {
echo $array["news"] ."<br/>". $array["username"];
}
Medlem sedan sep. 200347 inlägg
#3

Fixade det med hjälp av ditt exempel...såhär blev det:

$sql = "SELECT * FROM tNews as n LEFT OUTER JOIN tUsers as u on cAuthor = uID ORDER BY cDate, cTime DESC";
Medlem sedan mars 20032 667 inlägg
#4

Varför en left outer join?
Alla nyheter har väl en författare?
Vill du skriva ut nyheten om den saknar författare?

Medlem sedan nov. 2001274 inlägg
#5

Det är ju lite efter tycke och smak. :)

Bionic: Om du inte vill skriva ut nyheten om den saknar författare så byt ut "LEFT OUTER JOIN" mot "INNER JOIN".

Medlem sedan sep. 200347 inlägg
#6

jag har ingen koll alls på dom olika jointyperna. kollade i mysql-manualen men det gjorde mig inte vettigare.

vad är skillnad på inner och outer join?
nyheterna kommer alltid ha en författare, precis som du säger.

Medlem sedan mars 20032 667 inlägg
#7

Skillnaden mellan en inner join och en left outer join är att du i en left outer join får alla rader från den tabellen som står till vänster i join-villkoret. Men om det finns rader i den högra tabellen som uppfyller join-villkoret då får du även dessa, annars får du en post med null i de kolumner som tillhör den högra tabellen.

En inner join får du bara poster ifrån om join-villkoret uppfylls för båda tabellerna.

RED:
stavfel

Medlem sedan sep. 200347 inlägg
#8

Jag provade att lämna kolumnen cAuthor tom på en av nyheterna, och köra både outer och inner join för att se skillnaden, men det blev exakt samma resultat. Nyheten skrevs ut och det stod bara () där det ska vara (skribent).

edit: jag körde left join och left outer join. då blev det ingen skillnad menar jag. left inner join gav felmeddelande trots att cAuthor var satt. ??

Medlem sedan mars 20032 667 inlägg
#9

bionic skrev:

edit: jag körde left join och left outer join. då blev det ingen skillnad menar jag. left inner join gav felmeddelande trots att cAuthor var satt. ??

Inte så konstigt, "left inner join" är din egen påhittade variant. ;) Prova att enbart skriva "inner join". :)

257 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)