webForumDet fria alternativet

Hur sorterar man efter resultatet från en annan tabell?

Databaser & SQL

4 svar · 197 visningar · startad av Patrik81

Medlem sedan okt. 2001538 inlägg
Frågan#1

Lite luddig rubrik, men jag hade ju tidigare en fråga om vilket sätt att lagra länkar och hur många ggr dessa klickats på som var det mest optimala.

Nu har jag fått fram två tabeller, dels

tblLänkar med fälten
fldLänkID
fldLänkBeskrivning
fldÅtkomstpoäng

och

tblLänkKlicks med fälten
fldUID
fldLänkID
fldNumKlicks

Och tanken med detta är att vissa användare som har högre poäng skall kunna se fler länkar än de andra, därav fldÅtkomstpoäng, och att hämta hem alla länkar som anv. har tillåtelse att se är ju inga problem, det är ju bara
"SELECT fldLänkID, fldLänkBeskrivning FROM tblLänkar WHERE fldÅtkomst <= " . $accessPoints;
Typ...

Men nu vill jag ju dessutom sortera dessa resultat efter hur många ggr en anv. klickat på de diverse länkarna, och med den mest klickade hamnandes högst upp i resultatet.

Hade jag haft allt detta i samma tabell hade det ju inte varit några större problem att sortera eftersom jag då bara kunnat slänga på "ORDER BY fldNumKlicks DESC" så hade ju den saken varit biff.

Men nu ligger ju fldNumKlicks i den andra tabellen, och jag har aldrig riktigt greppat hur man joinar saker, jag antar att detta jag vill göra går att genomföra, antagligen med en enklare join (alltså in någon direkt komplex struktur) men det ligger tyvärr bortanför min kunskapshorisont.

Inte ens efter att ha läst w3schools sida om joins kände jag mig ett dugg klokare, och det var där jag lärde mig det mest grundläggande om sql, så jag känner mig rätt hopplös på det nu :/

Så om någon har lust att ge mig en (gärna väldokumenterad) syntax som utför denna sortering, så skulle jag bli jätteglad.

Tack på förhand.
MVH Patrik

Medlem sedan dec. 200012 464 inlägg
#2
select fldLänkBeskrivning,
fldÅtkomstpoäng 
 from tblLänkar tl , 
tblLänkKlicks tk
where tl.fldLänkID = tk.fldLänkID
and fldUID = 4711
order by fldNumKlicks desc

Det är alltså denna

where tl.fldLänkID = tk.fldLänkID

som anger join-villkoret

Medlem sedan okt. 2001538 inlägg
#3

Det blev inte riktigt som jag ville ha det, jag ville att åtkomstpoängen skulle vara en av grejorna som sållade bort poster via en where klausul.
Och så ville jag hämta ut fldlänkID med.
Men glad i hågen så tänkte jag att det kan ju inte vara jätteklurigt att skriva om den sqlfrågan så att den samarbetar med det. Men nu bråkar den :(

Och när den började bråka så tänkte jag att den kanske inte gillade åäö, så jag bytte ut hela schabraket mot engelska ord istället (skrev om tabellerna) men samma fel ändå.

SQL-frågan jag skapade:

SELECT fldFuncName, fldFuncDesc
FROM tblNavbar tn, tblNavbarClicks tc
WHERE tn.fldFuncName = tc.fldFuncName
AND fldUID = 'Patrik'
AND fldAccesReq <= 8
ORDER BY fldNumClicks DESC

Dock ger denna frågan ett elakt fel,
ERROR 1052: Column: 'fldFuncName' in field is ambiguous

Vad innebär detta? Kan jag inte hämta hem fldFuncName eftersom jag använder den i joinen?
För sqlfrågan jag fick av LarsG funkar, men hämtar inte ut exakt rätt resultat.

Iofs. skulle det väl gå att ordna genom att byta ut fldFuncName i bägge tabellerna mot fldFuncId, och sedan i tblNavbar lägga till fldFuncName, men det känns på något sätt fel att göra det, eftersom fldFuncName skall vara unikt i tblNavbar, precis som fldFuncId skulle bli i samma tabell.

Går det att modifiera den joinfrågan ovan, så att den fungerar?

Återigen tack på förhand :)
MVH Patrik

Medlem sedan dec. 200012 464 inlägg
#4

Du får kvalificera kolumnnamnet

SELECT tn.fldFuncName, fldFuncDesc
FROM tblNavbar tn, tblNavbarClicks tc
WHERE tn.fldFuncName = tc.fldFuncName
AND fldUID = 'Patrik'
AND fldAccesReq <= 8
ORDER BY fldNumClicks DESC
Medlem sedan okt. 2001538 inlägg
#5

Woohoo, du är en väldigt solid klippa LarsG.
Bockar och bugar ödmjukt och tackar så himla mycket för hjälpen.
Stort tack.

MVH Patrik

278 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)
117 ms — ändringar (db)