TrollMedlem sedan dec. 2003229 inlägg Hejsan!
Att lägga in data från en databas i en array är inga större problem men nu har jag stött på problem med att klämma in datan från en array i SQL fråga.
Med detta hämtar jag data till arrayen:
call dbOpen
strSQL = "SELECT Ord FROM tblOrd WHERE Kategori = 1"
Set RecSet = objCon.Execute(strSQL)
IF NOT RecSet.EOF THEN arrOrd = RecSet.GetRows
RecSet.Close
Set RecSet = nothing
call dbClose
IF ISArray(arrOrd) THEN
FOR I=0 to UBound(arrOrd,2)
strOrd = arrOrd(0,I)
Sen skriver jag ut det i text på sidan med: "<%=strOrd%> " så blir det ju ett mellanrum mellan varje ord.
Tabellen (tblOrd) ser typ ut såhär:
-------------------------------------
ID - autonumber
Kategori - en siffra som visar vilken kategori ordet tillhör, Kategorierna finns i en annan tabell (tblKategori)
Ord - Själva ordet.
--------------------------------------
Det jag vill göra är att oberoende av hur många ord som finns i Kategori 1 (kan det vara hur många som hellst?) så ska jag bygga en fråga som hämtar data från tblKategori där ett eller flera ord i tblOrd är samma.
Jag antar att jag måste skriva det något i stil med:
SQL = "SELECT K.ID, K.Titel, O.Ord FROM tblOrd O, tblKategori K WHERE O.Ord = O.Ord"
Men detta är ju inte rätt, på något vis måste jag ju fylla på frågan med alla ord som hämtas till arrayen och hur gör jag för att fråga om ett eller flera ord stämmer med andra ord i tblOrd?
Kanske dåligt förklarat så fråga om något är oklart :D
TrollMedlem sedan dec. 2003229 inlägg Ok, det verkar som om att det inte var den enkalste saken i världen att lösa... finns det något annat sätt att gå tillväga då? Om jag vill hämta viss data från tabell X om ord i tabell Y är samma en eller fler gånger?
Bananer är 'gula' och 'böjda' så om användaren valt att läsa om bananer så visas även en länk på sidan till en textbit om cintroner eftersom en annan rad i tabellen också har värdet 'gul' och radens artikelID har samma nummer som artikeln för citroner. Det visas även en länk till en artikel om pilbågar, eftersom vissa pilpågar är bananformade så finns ordet 'böjda' på en rad där artikelID är samma som artikeln för Pilbågar.
Ja ni fattar...
Detta är verkligen helt svårt att lösa :/
emissionMedlem sedan dec. 19996 721 inlägg Det känns som om vi kan bortse från arrayer.
Det jag vill göra är att oberoende av hur många ord som finns i Kategori 1 (kan det vara hur många som hellst?) så ska jag bygga en fråga som hämtar data från tblKategori där ett eller flera ord i tblOrd är samma.
Antar att du har ett Kategori-ID som du utgår ifrån.
SELECT K.ID, K.Titel, O.Ord FROM tblOrd O, tblKategori K, tblOrd O2 WHERE O.Kategori = K.ID AND O.Ord=O2.Ord AND O2.Kategori = 1
TrollMedlem sedan dec. 2003229 inlägg
emission skrev:
Antar att du har ett Kategori-ID som du utgår ifrån.
SELECT K.ID, K.Titel, O.Ord FROM tblOrd O, tblKategori K, tblOrd O2 WHERE O.Kategori = K.ID AND O.Ord=O2.Ord AND O2.Kategori = 1
Men hur funkar det om det är ett eller flera? Med den koden så väljer jag väll bara ett ord hela tiden?
Märkte att jag var lite otydlig...
Anledningen till att jag ville ha ett eller flera var för att jag vill kunna sortera svaren [rubriken som ID tillhör] efter hur många ord som stämmer övverns. Dvs om 'Banan' och 'pilbåge' har tex 4 ord som klaffar så ska 'pilbåge' hamna över tex 'Päron' som bara har 3 ord som klaffar. Förstår du?
Därför jag undrade över det där med arrayer, om man måste hämta ut all info och sedan köra det mot varandra på något vis, hoppas dock att det inte behövs för det lär bli mer än krångligt :D
emissionMedlem sedan dec. 19996 721 inlägg Vill du sortera på förekomsten så kan själva ordet inte vara med i frågan (jo, det går, med en klumpig subselect)
SELECT K.ID, K.Titel, COUNT(DISTINCT O.Ord) as HitCount FROM tblOrd O, tblKategori K, tblOrd O2 WHERE O.Kategori = K.ID AND O.Ord=O2.Ord AND O2.Kategori = 1
GROUP BY K.ID,K.Titel
ORDER BY HitCount DESC
såvida du inte använder MySQL, för då borde det se fint ut med
SELECT K.ID, K.Titel, COUNT(DISTINCT O.Ord) as HitCount, GROUP_CONCAT(DISTINCT O.Ord ORDER BY O.Ord DESC SEPARATOR ',') as Words FROM tblOrd O, tblKategori K, tblOrd O2 WHERE O.Kategori = K.ID AND O.Ord=O2.Ord AND O2.Kategori = 1
GROUP BY K.ID,K.Titel
ORDER BY HitCount DESC
TrollMedlem sedan dec. 2003229 inlägg Aah, ser inte helt fel ut faktiskt, ska testa mig fram med detta och se hur det går, lär höra av mig snart igen tror jag ;D
TrollMedlem sedan dec. 2003229 inlägg Jag får inte till det :/
Kollade igenom tabellerna och de ser ut såhär:
tblOrd
ID - autoNumber
Ord - Ett ord
artikleID - ID på artikeln som ordet tillhör
tblTexter
ID - autoNumber
Titel - Titel på text
I tblOrd skriver jag ett gäng med ord som tillhör en text, till alla ord sätter jag artikelID till samma ID som texten har i tblTexter.
Missförstog vi varandra eller försöker inte exemplen du gav mig hitta ett ord som är = ID? Det blir ju fel och jag förstår inte hur jag ska baka SQL-frågan :/
emissionMedlem sedan dec. 19996 721 inlägg
Troll skrev:
Missförstog vi varandra eller försöker inte exemplen du gav mig hitta ett ord som är = ID? /
Nej, ordets ID är irrelevant. Den SQL jag skrev tar ett argument, kategorins ID.
Med dina nya tabeller:
SELECT T.ID, T.Titel, COUNT(DISTINCT O.Ord) as HitCount FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1
GROUP BY T.ID,T.Titel
ORDER BY HitCount DESC
TrollMedlem sedan dec. 2003229 inlägg heh, glömde nämna att jag använder mig av Access, men får detta felmeddelande:
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'COUNT(DISTINCT O.Ord)'.
Koden jag använder är den du skickade:
strSQL = "SELECT K.ID, K.Titel, COUNT(DISTINCT O.Ord) as HitCount FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1 GROUP BY T.ID,T.Titel ORDER BY HitCount DESC"
emissionMedlem sedan dec. 19996 721 inlägg Aj då. Då blir det kanske bättre så här:
SELECT ID, Titel, COUNT(*) as HitCount FROM (SELECT DISTINCT T.ID,T.Titel,O.Ord FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1)
GROUP BY ID,Titel
HAVING COUNT(*)>0
ORDER BY HitCount DESC
TrollMedlem sedan dec. 2003229 inlägg Vet inte vad som felar men nu får jag:
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 3.
Använder denna kod för att skriva ut allt om det skulle funka:
<%
call dbOpen
strSQL = "SELECT ID, Titel, COUNT(*) as HitCount FROM (SELECT DISTINCT T.ID,T.Titel,O.Ord FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1) GROUP BY ID,Titel HAVING COUNT(*)>0 ORDER BY HitCount DESC"
Set RecSet = objCon.Execute(strSQL)
IF NOT RecSet.EOF THEN arrRecords = RecSet.GetRows
RecSet.Close
Set RecSet = nothing
call dbClose
IF ISArray(arrRecords) THEN
FOR I=0 to UBound(arrRecords,2)
strID = arrRecords(0,I)
strTitel = arrRecords(1,I)
Response.Write "ID: "&strID&" Titel: "&strTitel&""
Next
End if
%>
emissionMedlem sedan dec. 19996 721 inlägg Provar vidare. Har inte full koll på Access, så jag gissar bara...
SELECT ID, Titel, COUNT(*) as HitCount FROM (SELECT T.ID,T.Titel,O.Ord FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1 GROUP BY T.ID,T.Titel,O.Ord)
GROUP BY ID,Titel
ORDER BY HitCount DESC
TrollMedlem sedan dec. 2003229 inlägg När samma problem fortfarande:
-----------------
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 3.
/- com/test.asp, line 15
-----------------
Rad 15: Set RecSet = objCon.Execute(strSQL)
Blir inte klok på detta.
emissionMedlem sedan dec. 19996 721 inlägg Provar igen, utan DISTINCT
SELECT T.ID, T.Titel, COUNT(*) as HitCount FROM tblOrd O, tblTexter T, tblOrd O2 WHERE O.artikleID = T.ID AND O.Ord=O2.Ord AND O2.artikleID = 1
GROUP BY T.ID,T.Titel
ORDER BY COUNT(*) DESC
TrollMedlem sedan dec. 2003229 inlägg Inte det heller, det enda som hände nu var att jag fick 'Too few parameters. Expected 2' istället för 3.
Vad är det som kan fela egentligen? Testade att ta bort allt som hade med Count att göra men det blev ingen skillnad alls så det verkar ju inte som att det är där felet ligger.
emissionMedlem sedan dec. 19996 721 inlägg I så fall måste det vara någon kolumn eller tabell som är felstavad. artikleID?
TrollMedlem sedan dec. 2003229 inlägg Såklart! Gah, typsikt. Men nu är vi en bit påväg iaf, varkar fungera som jag vill.
Det enda jag undrar över nu är följande, när jag loopar ut alla titlar vars ID stämmer överrens med artikelID i tblOrd så skrivs alla titalar ut precis som det ska, det enda jag inte är riktigt nöjd med är att den även skriver ut den aktuella titeln.
Kan jag sortera bort den redan i min SQL eller måste jag köra en slags IF-sats senare där jag ska skriva ut allt?
emissionMedlem sedan dec. 19996 721 inlägg Lägg med
T.ID<>1
i WHERE-satsen. Siifran 1 ersätter du med det artikel-ID som gäller för stunden.