---
title: "Knepig lösning med arrayer och SQL!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/137009-knepig-lösning-med-arrayer-och-sql"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Troll"
published: "2005-11-05T17:38:45.000Z"
updated: "2005-11-06T23:10:05.000Z"
replies: 18
views: 416
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/137009-knepig-lösning-med-arrayer-och-sql"
---

# Knepig lösning med arrayer och SQL!

## #1 — Troll, 2005-11-05T17:38Z

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

Permalänk: https://www.webforum.nu/p/137009

## #2 — Troll, 2005-11-06T12:26Z

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 :/

Permalänk: https://www.webforum.nu/p/1702694

## #3 — emission, 2005-11-06T14:47Z

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
```

Permalänk: https://www.webforum.nu/p/1702759

## #4 — LarsG, 2005-11-06T14:51Z

Flyttas från ASP

Permalänk: https://www.webforum.nu/p/1702760

## #5 — Troll, 2005-11-06T14:58Z

> **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

Permalänk: https://www.webforum.nu/p/1702765

## #6 — emission, 2005-11-06T17:38Z

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
```

Permalänk: https://www.webforum.nu/p/1702808

## #7 — Troll, 2005-11-06T18:33Z

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

Permalänk: https://www.webforum.nu/p/1702840

## #8 — Troll, 2005-11-06T20:07Z

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 :/

Permalänk: https://www.webforum.nu/p/1702883

## #9 — emission, 2005-11-06T20:13Z

> **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
```

Permalänk: https://www.webforum.nu/p/1702888

## #10 — Troll, 2005-11-06T20:19Z

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"
```

Permalänk: https://www.webforum.nu/p/1702894

## #11 — emission, 2005-11-06T20:37Z

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
```

Permalänk: https://www.webforum.nu/p/1702909

## #12 — Troll, 2005-11-06T20:44Z

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
%>
```

Permalänk: https://www.webforum.nu/p/1702920

## #13 — emission, 2005-11-06T21:08Z

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
```

Permalänk: https://www.webforum.nu/p/1702933

## #14 — Troll, 2005-11-06T21:13Z

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.

Permalänk: https://www.webforum.nu/p/1702938

## #15 — emission, 2005-11-06T21:33Z

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
```

Permalänk: https://www.webforum.nu/p/1702955

## #16 — Troll, 2005-11-06T21:38Z

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.

Permalänk: https://www.webforum.nu/p/1702958

## #17 — emission, 2005-11-06T22:05Z

I så fall måste det vara någon kolumn eller tabell som är felstavad. artikleID?

Permalänk: https://www.webforum.nu/p/1702973

## #18 — Troll, 2005-11-06T22:18Z

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?

Permalänk: https://www.webforum.nu/p/1702979

## #19 — emission, 2005-11-06T23:10Z

Lägg med 

T.ID\<\>1 

i WHERE-satsen. Siifran 1 ersätter du med det artikel-ID som gäller för stunden.

Permalänk: https://www.webforum.nu/p/1702988

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/137009-knepig-lösning-med-arrayer-och-sql
