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
4 svar · 197 visningar · startad av Patrik81
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
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
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
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
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