Permalänk

Hjälp med MySQL fråga

Hejsan.
Jag har en MySQL fråga jag skulle vilja genomföra, men den är ganska komplicerad.

Jag har två tabeller, en som heter Användare och en som heter Länkar.
Länkar tabellen ser ut såhär (förenklat):

ID (PRIMARY, AI) - NAMN - LÄNK - UPPLADDARE

Användare tabellen ser ut såhär (förenklat):

ID (PRIMARY, AI) - ANVÄNDARNAMN - LEVEL

Tills nu har jag gjort såhär att jag frågar MySQL efter alla rader i Länkar och sedan för varje rad i Länkar frågat databasen om ID och LEVEL från Användare tabellen, vilket är ganska onödigt och prestandakrävande.

Så vad jag vill ha är en fråga som frågar efter allt i Länkar (SELECT * FROM Länkar) och sedan i resultatet lägger till ID och LEVEL från Användare tabellen där ID och LEVEL kommer från raden där ANVÄNDARNAMN är samma som UPPLADDARE i Länk raden (Lite oklart, hoppas ni förstår). Som jag har förstått det ska detta gå att genomföra med hjälp av JOIN, men jag vet inte riktigt hur jag ska använda det. Skulle vara underbart om någon kunde hjälpa mig och peka mig i rätt riktning

EDIT: Jag skulle också vilja utesluta rader där LEVEL är 0.

Tack i förhand!

Visa signatur

"I think everybody I know is NPCs"
Intel C2Q Q6660 | 4096MB RAM | GeForce GTS250 1GB

Permalänk
Medlem

här kommer ett exempel på hur en join kan se ut i ditt fall.

select länkar.id, länkar.namn, länkar.länk, användare.id, användare.level from länkar inner join användare on användare.användarnamn=länkar.uppladdare where användare.level > 0

Den näst sista raden är det som är mest intressant här "slår" du ihop de två olika tabellerna där kolumnen användare.användarnamn är samma som länkar.uppladdare.

Anledningen att jag skrivit tabellnamn.kolumnnamn överallt är för att du har två kolumner som heter id (en i varje tabell) och mysql måste veta vilken kolumn det är du frågar efter (som praxis skriver jag alltid så).

Första steget är egentligen att skapa en såkallad foreign key emellan uppladdare och användarnamn, men jag har en känsla att användarnamn inte är primärnyckel i sin tabell så det är antagligen lite överkurs just nu.

mer att läsa:
MySQL :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 12.2.7.1 JOIN Syntax

Permalänk

Tack
Funkar jätte bra, men den verkar inte vilja ge mig några resultat om jag lägger till WHERE användare.level > 0, jag får noll rader fast det ska finnas flera stycken som har 1.

EDIT: Nu funkar det, ORDER BY hade visst kommit före WHERE

Visa signatur

"I think everybody I know is NPCs"
Intel C2Q Q6660 | 4096MB RAM | GeForce GTS250 1GB

Permalänk
Medlem

hmm, vad är användare.level för kolumntyp? jag antog att den var en integer av något slag, eller har du skapat den som char() eller varchar()?

Permalänk

Har stött på lite mer problem.

SELECT användare.*, länkar.COUNT(*) FROM användare LEFT OUTER JOIN länkar ON användare.username = länkar.addedby WHERE användare.id = '$id'

Det jag försöker göra är att hämta en hel rad från Användare och antalet rader i Länkar där användare.username = länkar.addedby.
Jag får ett SYNTAX ERROR från MySQL. Men jag kan använda tex. "användare.*, länkar.name" men inte COUNT(*).

Tack i förhand

Visa signatur

"I think everybody I know is NPCs"
Intel C2Q Q6660 | 4096MB RAM | GeForce GTS250 1GB