webForumDet fria alternativet

Hämta information som hör ihop från två tabeller

ASP

23 svar · 746 visningar · startad av trexter.com

Medlem sedan apr. 20021 203 inlägg
Frågan#1

Säg att jag ska göra ett register över mitt godis (eller inte).

Först tabell ett:
1 - Fazer
2 - Marabou
3 - Ahlgrens

Tabell två:
1 - 1 - Nisses saltisar
2 - 1 - Sega kolor
3 - 1 - Guffegott
4 - 2 - Med luftbubblor
5 - 2 - Utan luftbubblor
6 - 3 - Sega bilar

Här hör alltså olika produkter till olika fabrikat. Så har jag gjort förrut för att loopa ut innehållet i dessa två tabellerna:

' SELECT som  hämtar alla fabrikat
' Loopar igenom alla posterna
'    I loopen sriver jag ut fabrikatet
'    Sedan kör jag en ny SELECT som hämtar alla sorters godis 
'    från tabell två som har samma "kopplings-id" som det i det 
'    aktuella "recordet".
'    ... skriver alltså ut fabrikat överst och under olika sorter.
' Slut på loop

Är detta ett bra sätt? Kan man fixa med på något annat sätt utan att använda två SELECTS och RecordSets?

:)

Medlem sedan aug. 2002351 inlägg
#2

hmm, du kan väl göra nått åt de här hållet:

sql="SELECT tabellett.tillverkarid,tabellett.namn,tabelltva.tillverkarid,tabelltva.godisnamn FROM tabellett,tabelltva"

ja sen kan du ju göra uraval som du vill., funkar det där tror du?

Medlem sedan feb. 200112 078 inlägg
#3

Använd en JOIN:

Tabell ett = tManu:
* ID
* Name

Tabell två = tProd:
* ID
* ManuID
* Name

SELECT *, tm.Name as ManuName FROM tManu tm
INNER JOIN tProd tp ON tm.ID = tp.ManuID
do until rs.eof
   if rs("ManuName") <> strBef then
      response.write rs("ManuName")
   end if

   response.write("name") & "<br>"

   strBef = rs("ManuName")
rs.movenext
loop
Medlem sedan aug. 2002351 inlägg
#4

fast det Override skrev ser ju stabilare ut :)

Medlem sedan apr. 20021 203 inlägg
#5

Vad står strBef för? (tack förresten!)

:)

Medlem sedan feb. 200112 078 inlägg
#6

strBef är en variabel som innehåller den föregående radens värde av kolumnen Manu i tabellen tManu.

Alltså, om strBef inte är likamed rs("manu") så skall rs("manu") skrivas ut, så att de sorteras efter tillverkare (manu).

Medlem sedan apr. 20021 203 inlägg
#7

Så Bef står för Before? :q
Jag har lite problem, vet inte riktigt hur jag ska få ihop det.

SELECT *, tm.Name as ManuName FROM tManu tm
INNER JOIN tProd tp ON tm.ID = tp.ManuID
Microsoft JET Database Engine error '80040e14' 
Syntax error (missing operator) in query expression 'prioritet INNER JOIN Artiklar a ON ak.ID = a.kategori'.

:)

Medlem sedan dec. 200012 464 inlägg
#8

Kan du visa koden. Felmeddelandet hänger inte ihop med den kod du visar. Vad är ak?

Medlem sedan feb. 200112 078 inlägg
#9

Ja. Bef är en förkortning som jag använde. 'Str' för String (datatypen) och 'Bef' för Before (före). Detta är alltså inget som är inbyggt i ADO, recordsets eller liknande, det är bara en variabel som håller koll på om den skall skriva ut en ny tillverkare eller inte, eftersom de grupperas och listas så. :)

Alltså; SQL-satsen skall vara på en rad, jag skrev den bara på två, för att förenkla. :)

Alltså t.ex:

set recset = connect.execute("SELECT *, tm.Name as ManuName FROM tManu tm INNER JOIN tProd tp ON tm.ID = tp.ManuID")

Det ser ut som om du har nåt fel i din SQL, kan du skriva ut hela sql-satsen så vi får se om det är nåt fel där?

Medlem sedan apr. 20021 203 inlägg
#10

Jo, det gör det faktiskt. Ak skulle vara "smeknamnet" för tabellen ArtikelKategoerier (är inte alls säker på att jag förstod hur man skulle göra).

Tabellerna heter:
Artiklar
ArtikelKategorier

Kolummerna heter:
id datum ettor tvaor treor fyror femmor klick kategori prioritet titel forfattare artikeln

samt:
gruppnamn id prioritet

Detta vill jag presentera i en tabell och på så sätt få något slags "artikelindex".
ettor, tvoar, treor osv. är till en omröstning...

:)

Medlem sedan apr. 20021 203 inlägg
#11

LarsG: Ojsan, du hade rätt. Råkade posta OveRRides kod.. :)

Connect.Execute "SELECT *, ak.gruppnamn FROM ArtikelKategorier ak ORDER BY prioritet INNER JOIN Artiklar a ON ak.ID = a.kategori"

SELECT *, ak.gruppnamn FROM ArtikelKategorier ak ORDER BY prioritet INNER JOIN Artiklar a ON ak.ID = a.kategori
Medlem sedan feb. 200112 078 inlägg
#12
SELECT * FROM artiklar a INNER JOIN artikelKategorier ak ON a.kategori = ak.id

Skriv ut med:

do until rs.eof
   if rs("ManuName") <> strBef then
      response.write "<b>" & rs("artikelkategori") & "</b><br>"
   end if

   response.write rs("artikel") & "<br>"

   strBef = rs("artikelkategori")
rs.movenext
loop
Medlem sedan apr. 20021 203 inlägg
#13

Tack Landsorganisationen! :bire
(Hajade ni den? Antagligen. ;) )

Medlem sedan feb. 200112 078 inlägg
#14

trexter.com skrev:

Tack Landsorganisationen! :bire
(Hajade ni den? Antagligen. ;) )

Jag hajade den inte. :q

Medlem sedan apr. 20021 203 inlägg
#15

Landstings + Organisationen = L + O = LO
LarsG + OveRRidE = L + O = LO
Ok, den var dålig! :e

En sak, hur får jag med ett id (från kolummen id alltså) från Artikelar? Försöker jag med rs("id") blir det "Item cannot be found in the collection corresponding to the requested name or ordinal. "

:)

Medlem sedan dec. 200012 464 inlägg
#16

Hur ser select-frågan ut?

Medlem sedan apr. 20021 203 inlägg
#17
GetArtiklar = "SELECT * FROM artiklar a INNER JOIN artikelKategorier ak ON a.kategori = ak.id"
Medlem sedan dec. 200012 464 inlägg
#18

Då skall det inte vara något problem att få fram id med rs("id"). Hur ser resten ut? Använder du rätt recordset?

Medlem sedan apr. 20021 203 inlägg
#19
Sub Artiklar()

GetArtiklar = "SELECT * FROM artiklar a INNER JOIN artikelKategorier ak ON a.kategori = ak.id"
Set rs = Connect.Execute(GetArtiklar)
Response.Write "<table cellspacing=""0"" cellpadding=""4"">"
graellervitrad = 1
do until rs.eof
   graellervitrad = graellervitrad * -1
   if rs("gruppnamn") <> strBef then
      response.write "<tr><td width=""155"" class=""forstaraden"">" & rs("gruppnamn") & "</td><td width=""80"" class=""forstaraden"">Besökt</td><td width=""60"" class=""forstaraden"">Betyg</td><td width=""140"" class=""forstaraden"">Skrevs</td><td width=""100"" class=""forstaraden"">Författare</td></tr>"
   end if
   if graellervitrad = -1 then
      graellervitruta = 1
   else
      graellervitruta = 2
   end if
      response.write "<tr><td width=""155"" class=""radtyp"&graellervitruta&"""><a href=""dennasidan.asp?vad=read&vilken="&rs("id")&""" class=""inbakadlank"">" & rs("titel") & "</a></td><td width=""80"" class=""radtyp"&graellervitruta&""">" & rs("klick") & " gånger</td><td width=""60"" class=""radtyp"&graellervitruta&""">N/A</td><td width=""140"" class=""radtyp"&graellervitruta&""">" & rs("datum") & "</td><td width=""100"" class=""radtyp"&graellervitruta&""">" & rs("forfattare") & "</td></tr>"

   strBef = rs("gruppnamn")
rs.movenext
loop

rs.Close
set rs = nothing

Response.Write "</table>"
End Sub

:)

Medlem sedan apr. 20021 203 inlägg
#20

Hur ska jag ändra SQL:en för att kunna utnyttja id:et?
Saken är väl den att två kolummer heter id, därför b´lir det problem.

eller?

:)

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