webForumDet fria alternativet

Labels på fält vid LEFT JOIN

Databaser & SQL

8 svar · 985 visningar · startad av prplxr

Medlem sedan juni 2012581 inlägg
Frågan#1

God morgon! Nu är jag i farten igen. Eller snarare, nu har min fart avtagit igen...

Jag sitter och gör ett uppslag mot min MySQL med en LEFT JOIN. När jag skriver ut resultatet vill jag dock inte använda numrerade index utan jag vill använda namnet på fälten i databasen, men det tycks inte gå något vidare.

Exempelvis:

$sql = "SELECT * FROM tabell1 LEFT JOIN tabell2 ON tabell1.apa = tabell2.banan";
...
echo $row['apa'] . $row['tabell2.banan'];

Båda två ger ett felmeddelande a la "Undefined index".

Någon vänlig själ som känner sig manad att ge mig en knuff i rätt riktning?

Medlem sedan juni 200032 967 inlägg
#2

Du får specificera de fält du vill ha ut, och ge dem alias i frågan.

SELECT tabell1.ID as t1ID, tabell2.ID as t2ID... FROM ...

Referera sedan till aliasnamnen t1ID, t2ID, etc.

Mvh

Medlem sedan juni 2012581 inlägg
#3

Fungerar, tack! :-)

Medlem sedan juni 200032 967 inlägg
#4

Jag flyttar tråden en liten, liten aning. :)

Det borde f.ö. bara vara problem med fältnamn som finns i bägge tabellerna i din join - så det är bara de fält du behöver ge alias. (Det är dock alltid en bra idé att specificera fälten man vill ha, istället för att använda SELECT *.)

mvh

Medlem sedan juni 2012581 inlägg
#5

@nders skrev:

Det borde f.ö. bara vara problem med fältnamn som finns i bägge tabellerna i din join

Ja, jag tyckte ju också det, men faktum är att gäller ALLA fält, oavsett om de finns i båda tabellerna. Det går inte att använda alias alls när jag gör en join.

Medlem sedan juni 200032 967 inlägg
#6

Konstigt. Kanske är någon MySQL-specialitet jag inte känner till - jag jobbar mest med andra DBMS.

mvh

Medlem sedan aug. 20039 340 inlägg
#7

Något annat du kan pröva är att köra print_r($row); och se vad arrayen faktiskt innehåller när du kör frågan utan alias för de fälten.

Medlem sedan mars 20034 471 inlägg
#8

Om det finns kolumner i de två tabellerna som heter samma sak, så kommer * att ta ut mer än en kolumn som har samma namn (minst ett par lika-namnade kolumner). Utan att vara säker, så tror jag att det kan ställa till det i result set:et. Alltså så att result set:et inte alls fungerar, även för kolumner som har unika namn. Det kan vara förklaringen.

Medlem sedan juni 2012581 inlägg
#9

aasah skrev:

Om det finns kolumner i de två tabellerna som heter samma sak, så kommer * att ta ut mer än en kolumn som har samma namn (minst ett par lika-namnade kolumner). Utan att vara säker, så tror jag att det kan ställa till det i result set:et. Alltså så att result set:et inte alls fungerar, även för kolumner som har unika namn. Det kan vara förklaringen.

Det kan mycket väl vara så! När jag hämtar * från en tabell med en eller flera JOINs annars fungerar det att använda namnen på tabellerna som alias.

260 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)