webForumDet fria alternativet

matcha info ur en tabell med info i en annan?

ASP

19 svar · 367 visningar · startad av ConnyFox

Medlem sedan aug. 20011 087 inlägg
Frågan#1

jag har en tabell där jag har ip nummer samt ett namn till varje IP

sedan har jag en annan tabell där alla besökares ip loggas.

hur gör jag för att när jag skriver ut infot ur tabell2 så kollar den för varje ip ifall det finns med i tabell 1, om det gör det så skrivs namnet ut brevid.

Detta alternativt att den kollar om ip´t finns i tabell 1 och sparar ner namnet i tabell två varje gång en besökare går in på sidan.

vet inte vilken av dessa lösningar som vore snabbast eller hur jag skall gå till väga så jag frågar er. hoppas ni förstås!

tabell1
tblIP, tblIPnamn, tblIPdatum

Tabell2
tblIP, tblIPdatum

och ja just d ja, jag använder mySQL

Medlem sedan aug. 20011 087 inlägg
#2

Hmm va jag inte tillräkligt tydlig eller går det inte att göra så?

Medlem sedan mars 20025 907 inlägg
#3

Något sådant här kanske?

SELECT tblIP, tblNamn, tblIPdatum
FROM Tabell2
LEFT JOIN Tabell1
ON Tabell2.tblIP = Tabell1.tblIP
ORDER BY tblIPdatum
Medlem sedan aug. 20011 087 inlägg
#4

hum.. ska testa d ser så vrickat ut att det faktiskt borde kunna funka :D

Medlem sedan aug. 20011 087 inlägg
#5

hmm hur skriver jag ut ipnamn från tabell1 tillsammans bed infon i tabell2 då? förstår inte riktigt koden ovan.. =/

Medlem sedan aug. 20011 087 inlägg
#6

Detta är koden jag använder nu som skriver ut från tabell2

mysql = "select * from tabell2 order by tblIPdatum limit 30"
set RS = connect.Execute(MySQL)

do until rs.eof
response.write "" & rs("tblIP") & " - <font class='txtgrey'>" & rs("tblIPdatum") & "</font><br>"
rs.movenext
loop

jag vill som sagt att ifall rs("tblIP") i tabell2 stämmer överänns med något ip i tabell1 så skrivs tblNAMN från tabell1 ut framför ip numret..

Medlem sedan mars 20025 907 inlägg
#7
mysql = "SELECT tblIP, tblNamn, tblIPdatum "&_
"FROM Tabell2 "&_
"LEFT JOIN Tabell1 "&_
"ON Tabell2.tblIP = Tabell1.tblIP "&_
"ORDER BY tblIPdatum"&_
"limit 30" 
set RS = connect.Execute(MySQL)

do until rs.eof
response.write rs("tblNamn") & " - " & rs("tblIP") & " - <font class='txtgrey'>" & rs("tblIPdatum") & "</font><br>"
rs.movenext
loop

Kanske?

Medlem sedan aug. 20011 087 inlägg
#8

Ah tack! men jag får felmeddelande

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[MySQL][ODBC 3.51 Driver][mysqld-4.0.14-nt]Column: 'IP' in field list is ambiguous
/mysql/ip.asp, line 37

har inte en susning av vad det betyder

Medlem sedan mars 2003772 inlägg
#9

Specificera Tabell.Column istället för bara Column.
Annars vet den inte vilken tabell du syftar på om båda tabellerna har varsin kolumn med samma namn.

mysql = "SELECT Tabell2.tblIP, Tabell2.tblNamn, Tabell2.tblIPdatum "&_
"FROM Tabell2 "&_
"LEFT JOIN Tabell1 "&_
"ON Tabell2.tblIP = Tabell1.tblIP "&_
"ORDER BY Tabell2.tblIPdatum"&_
"limit 30"
Medlem sedan aug. 20011 087 inlägg
#10

hum.. d här med join e helt nytt för mig.. vad gör jag fel?

Allt jag behöver plocka från tabell1(ip) är väll ip och ipnamn ?

för sedan skall ip matchas med ip från tabell2(ipalla) och om det stämmer så skall jag kunna skriva ut ipnamn med tabell2(ipalla)

mysql = "SELECT ip.ip, ip.ipNamn FROM ip LEFT JOIN ipalla ON ip.IP = ipalla.IP ORDER BY ipalla.IPdatum limit 30"

Tänker jag helt fel?

Medlem sedan aug. 20011 087 inlägg
#11

Jag fick felmeddelandet

Feltyp:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
/mysql/ip.asp, line 39

på raden där mysql körs

Medlem sedan mars 2003772 inlägg
#12

Det var väl tabell2 du ville skriva ut allt ifrån och matcha mot tabell1? då borde du joina tabell1 mot tabell2. Nu ser det ut som du joinat tabell2 mot tabell1

Medlem sedan aug. 20011 087 inlägg
#13

Hmm ok men tvärtom funkar inte så mycket bättre.. ähh ni får se hela kodne kanske missat nått :D

<%
set connect = server.createobject("ADODB.connection")
Connect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=ip;" 
set RS = server.createobject("ADODB.recordset")

mysql = "select * from ip order by ipantal desc limit 10"
set RS = connect.Execute(MySQL)

do until rs.eof
response.write "" & rs("ipantal") & ", <font class='txtlight'>" & rs("ipnamn") & "</font> - " & rs("ip") & " - <font class='txtgrey'>" & rs("ipdatum") & "</font><br>"
rs.movenext
loop
response.write "<br>"

MySQL = "SELECT ipalla.ip, ipalla.ipdatum FROM ipalla LEFT JOIN ip ON ip.IP = ipalla.IP ORDER BY ipalla.IPdatum limit 30" 
[B]set RS = connect.Execute(MySQL)[/B]

do until rs.eof
response.write "" & rs("ipNamn") & " - " & rs("IP") & " - <font class='txtgrey'>" & rs("IPdatum") & "</font><br>"
rs.movenext
loop
%>

den markerade raden är den jag får fel på

Medlem sedan aug. 20011 087 inlägg
#14

det är alltså den sista sql execueringen som inte funkar och dess kod jag bett er om hjälp med.

Medlem sedan mars 2003772 inlägg
#15

Kan du visa båda tabellerna samt kolumnerna till respektive tabell med korrekta namn.

Medlem sedan aug. 20011 087 inlägg
#16

tabellen ip :
ip
ipnamn
ipdatum
ipantal

tabellen ipalla :
ip
ipdatum

Medlem sedan mars 2003772 inlägg
#17
<%
set connect = server.createobject("ADODB.connection")
Connect.Open "Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=ip;" 
set RS = server.createobject("ADODB.recordset")

MySQL = "SELECT IPAlla.ip, IPAlla.IPDatum, IP.IPNamn from IPAlla Left join IP on IPAlla.IP = IP.IP ORDER BY ipalla.IPdatum limit 30" 
set RS = connect.Execute(MySQL)

do until rs.eof
response.write "" & rs("ipNamn") & " - " & rs("IP") & " - <font class='txtgrey'>" & rs("IPdatum") & "</font><br>"
rs.movenext
loop
%>
Medlem sedan aug. 20011 087 inlägg
#18

hmm d funkar, förstår inte riktigt varför men det funkar :D

tack!

Medlem sedan mars 2003772 inlägg
#19

Om du koller på den koden du postade ovan så inkluderade du inte ipNamn i din query. Men du försökte skriva ut det.

MySQL = "SELECT ipalla.ip, ipalla.ipdatum FROM ipalla LEFT JOIN ip ON ip.IP = ipalla.IP ORDER BY ipalla.IPdatum limit 30" 
set RS = connect.Execute(MySQL)

do until rs.eof
response.write "" & [b]rs("ipNamn")[/b] & " - " & rs("IP") & " - <font class='txtgrey'>" & rs("IPdatum") & "</font><br>"
rs.movenext
loop
%>

Du hade alltså missat att inkludera IP.IPNamn i din select.
Du måste specificera vilka kolumner du vill plocka ut från båda tabellerna. Gör du bara en join utan att selecta IP.IPNamn kolumen i den andra tabellen så kan du ju inte skriva ut den.

Medlem sedan aug. 20011 087 inlägg
#20

Jahaa d va d du ändrade. Jag tyckte det såg skumt ut när man selectade en kolumn från en tabell när den ligger i en annan :D

Trode man fick med den automatiskt när man gjorde en join på ip

men där ser man! tack!

259 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)