Krångel med join i Mysql (för url rewrite)

Permalänk
Medlem

Krångel med join i Mysql (för url rewrite)

Har kört fast lite med mina mediokra php-kunskaper

vi kallar första tabellen för vad
den andra för vem

I vad finns följande fält
id, vem, namn
Exempel: 9,1,Pötatisbyllar

I vem finns följande fält
id, vnamn
Exempel: 1,Kalle Anka

VAD är det jag visar på en sajt och vem som "äger" det.

Det jag vill frå fram i en enda query är vem, namn från VAD och vnamn från VEM, så resultatet blir
Kalle Anka, Potatisbyllar

Alltså att 1;an där omvandlas till vad som står i vnamn med id:1 och inte ger siffran 1 som resultat
Jäklar vad stor förklaring detta blev, men nåväl, det blir säkerligen några följdfrågor i samma ämne så why not

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem

Selecta endast de attributer du vill ha, sedan använder du "FROM vad LEFT JOIN vem ON vad.vem=vem.id"

Visa signatur

Gigabyte P35 DS3 -- Intel Core2Quad 8300 @ 3GHz-- XFX 5830 1GB -- Corsair Dominator 4096MB 1066mhz -- Fractal Design Define R2 -- 60GB OCZ SSD - 320GB Samsung -- Fractal Design 550W

Permalänk
Medlem

Du kan också göra följande använda en nästlad select.

SELECT (SELECT vnamn FROM vad t2 WHERE t2.id = t1.vem) as vnamn, t1.namn FROM vem t1
Eller som personsn före mig skrivit. Du tjänar mer i prestanda genom att använda en JOIN i detta fall.

Visa signatur

AMD Phenom II X6 1100T BE @ 4.3 Ghz , Gigabyte GA-990FXA-UD3 AM3+, Corsair 8GB CL9 1866Mhz, Gigabyte R9 280X 3Gb OC, SSD 120GB OCZ Vertex 2

Permalänk
Medlem

Ahaa, det är runt 10000 rader i vad och runt 100 i vem, vilken metod är mest effektiv att använda sig av då ?
Kommer köras via cron, så det är inget som besökarna behöver vänta på.

Visa signatur

Mitt modermodem är trimmat!

Permalänk
Medlem
Skrivet av HCP:

Ahaa, det är runt 10000 rader i vad och runt 100 i vem, vilken metod är mest effektiv att använda sig av då ?
Kommer köras via cron, så det är inget som besökarna behöver vänta på.

Det är väl bara att testa och sen se vilken query som tar längst tid?

Permalänk
Medlem
Skrivet av HCP:

Ahaa, det är runt 10000 rader i vad och runt 100 i vem, vilken metod är mest effektiv att använda sig av då ?
Kommer köras via cron, så det är inget som besökarna behöver vänta på.

En inner join blir nästan garanterat snabbare än en nästlad query. Det skriver ju även killen som skrev den satsen.

lathund: SELECT vnamn, v.namn FROM vem INNER JOIN vad v ON v.vem = vem.id

(vilka urbota förvirrande tabell- och kolumnnamn du har angivit. du kör väl inte det live?)

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

En inner join blir nästan garanterat snabbare än en nästlad query. Det skriver ju även killen som skrev den satsen.

lathund: SELECT vnamn, v.namn FROM vem INNER JOIN vad v ON v.vem = vem.id

(vilka urbota förvirrande tabell- och kolumnnamn du har angivit. du kör väl inte det live?)

Detta förslag är det bästa.

En nästlad select har sina fördelar om servern du kör databasen på har en begränsad mängd ramminne.
Men i det fall då du enbart skall ta ut 2 kolumner (?) så är det en försumbar mängd minne. Värre är om du joinar 2 tabeller som har många kolumner och mycket data med en select där du hämtar i princip allt.

Good luck

Visa signatur

AMD Phenom II X6 1100T BE @ 4.3 Ghz , Gigabyte GA-990FXA-UD3 AM3+, Corsair 8GB CL9 1866Mhz, Gigabyte R9 280X 3Gb OC, SSD 120GB OCZ Vertex 2

Permalänk
Medlem

Tack för klargörandet, har inte vågat köra live än men i test med Kalle anka och Köttbyllar funkar de prima
Ska plocka ut infon för url;er, så de blir SEO-vänligt, typ hemsida.xx/kalle-anka/kottbyllar istället för hemsida.xx/show.php?id=9

Bara i mitt test lokalt jag döpte till vad och vem, blev galet förvirrande efter ett tag.

Visa signatur

Mitt modermodem är trimmat!