webForumDet fria alternativet

Labels på fält vid LEFT JOIN

8 svar · 983 visningar · startad av prplxr

prplxrMedlem sedan juni 2012582 inlägg
#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?

@ndersMedlem sedan juni 200032 969 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

prplxrMedlem sedan juni 2012582 inlägg
#3

Fungerar, tack! :-)

@ndersMedlem sedan juni 200032 969 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

prplxrMedlem sedan juni 2012582 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.

@ndersMedlem sedan juni 200032 969 inlägg
#6

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

mvh

nitro2k01Medlem sedan aug. 20039 342 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.

aasahMedlem 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.

prplxrMedlem sedan juni 2012582 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.

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)