Det kommer att bli finns om det finns minst en rad som uppfyller villkoret.
Vad vill du kolla? Om det finns minst 10 poster som uppfyller villkoret?
------------------
essentitia preter non sans multiplicandum
15 svar · 252 visningar · startad av Mz
Hej!
Kan man använda SELECT TOP 10 * osv. på detta sätt?
<%
'Connecta...
SQL = "SELECT TOP 10 * FROM tabell WHERE kol = "& Value &" ORDER BY ID DESC"
Set RecSet = Connect.Execute(SQL)
If RecSet.EOF Then
'##-- Tomt
Else
'##-- Finns
End If
'Stäng...
%>
Jag får bara "Finns" hur jag än gör, någon som vet varför?
------------------
~ Mz ~
Det kommer att bli finns om det finns minst en rad som uppfyller villkoret.
Vad vill du kolla? Om det finns minst 10 poster som uppfyller villkoret?
------------------
essentitia preter non sans multiplicandum
Hej LarsG.
Jag vill kolla om de 10 senast sparade posterna innehåller värdet i Value, men det vill inte funka. ;)
Harru några tips?
------------------
~ Mz ~
Det är något helt annat, så frågan blir lite knepigare
sql = " select count(*) from tabell
where id in (select top 10 id
from tabell order by id desc)
and kol = " & value & " having count(*) = 10 "
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 20 nov 2001]
Råkade skriva fel, ser jag
sql = " select count(*) from tabell
where id in (select top 10 id
from tabell order by id desc)
and kol = " & value & " having count(*) = 10 "
------------------
essentitia preter non sans multiplicandum
Nja, det fungerar inte redigt som jag tänkt mig..
Så här ser den rediga koden ut:
<%
strIP = Request.ServerVariables("REMOTE_ADDR")
strNamn = Request.Form("namn")
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("..\db\besokare.mdb")
SQL = "SELECT COUNT(*) FROM mimLinks WHERE ID IN (SELECT TOP 10 ID FROM mimLinks ORDER BY ID DESC) AND IP = '"& strIP &"' HAVING COUNT(*) = 10 "
Set RecSet = Connect.Execute(SQL)
'##------------------------------------------------------------------------------------------------------------------------------------------------------
If RecSet.EOF Then
'##-- IPnummret finns inte, så spara --##
SQL = "INSERT INTO mimLinks (vaNamn, IP) VALUES('"& strNamn &"', '"& strIP &"')"
Connect.Execute(SQL)
Response.Redirect("basic.asp")
Else
'##-- IPnummer finns, skicka vidare --##
Response.Redirect("basic.asp?action=reason")
End If
'##------------------------------------------------------------------------------------------------------------------------------------------------------
RecSet.Close
Connect.Close
Set RecSet = Nothing
Set Connect = Nothing
%>
Nu sparar den mitt inlägg även om mitt IP-nummer ligger bland de 10 första posterna.. :(
Hilfe!
------------------
~ Mz ~
Då missförstod jag dig, jag tolkade det som om alla de 10 senaste måste innehålla värdet.
Förstår jag dig rätt om det räcker att en post bland de 10 sista innehåller värdet?
sql = " select count(*) from tabell
where id in (select top 10 id
from tabell order by id desc)
and kol = " & value & " having count(*) > 0 "
------------------
essentitia preter non sans multiplicandum
Korrekt, det räcker med att en av posterna innehåller värdet för att inlägget inte skall sparas. :)
Sedan en liten fråga till: ;)
Varför tar det ca 1 min att utföra åtgärden med din SQL-sats? :(
(Win2000Pro, IIS5.0, 384 Mb RAM, Access2000)
------------------
~ Mz ~
[Redigerat av Mz den 20 nov 2001]
Nu fungerar det i alla fall som jag tänkt, fick vända på kriterierna i IFsatsen. :)
Men det tar lååååååång tid att köra snutten. :(
Har du någon aning varför?
------------------
~ Mz ~
Hur mycket data har du i tabellen? Har du något index på kolumnen kol?
Är den här snabbare?
select distinct 1 from xxx
where exists (select 1 from tabellen where id in (select top 10 id from tabellen order by id desc ) and kol = 'VALUE')
där xxx kan vara vilken tabell som helst, speciellt någon som innehåller lite data (minst en rad dock).
------------------
essentitia preter non sans multiplicandum
Just nu - ca 4000 poster på 5 kolumner, inte mycket text i kolumnerna dock.
Inga fler tabeller i databasen...
------------------
~ Mz ~
Access och subqueries är ingen höjdar kombination, segare än heinz ketchup :e
cya,
PatrikB
------------------
'## -- second place is the first looser -- ##'
Du kan ju ta bort having count(*) > 0 ser jag. Det räcker ju att kolla om recordsetet blir tomt eller inte.
Nu vet jag inget om hur Access optimerar frågor men att läsa igenom en tabell med 4000 rader skall inte ta en minut.
------------------
essentitia preter non sans multiplicandum
Utan subselect
select 1 from tabellen t1 inner join
(select top 10 id from tabellen
order by id desc) as t2 on t1.id = t2.id
where t1.kol = 'Value'
Nu vet jag inte om Access klarar av en sådan fråga.
------------------
essentitia preter non sans multiplicandum