har gjort en sokfunktion, dar det finns 7st dropdown listor som man valjer och nar man sedan valjer search sa vill jag att den listar den specifika kombinationen av det jag valt, just nu ar dfet sa att de listar alla poster som den hittar ur varje dropdown...
call OpenDb()
Period = request.form("period")
PriceRange = request.form("PriceRange")
Bedrooms = request.form("Bedrooms")
Bathrooms = request.form("Bathrooms")
Furnished = request.form("Furnished")
Parking = request.form("Parking")
Pet = request.form("Pet")
'SQL="SELECT Top 20 * FROM sublets WHERE Status = TRUE"
SQL="SELECT * FROM sublets WHERE Period LIKE '%" & Period & "%' OR Price LIKE '%" & PriceRange & "%' " &_
"OR Bedrooms LIKE '%" & Bedrooms & "%' OR Bathrooms LIKE '%" & Bathrooms & "%' OR Furnished LIKE '%" & Furnished & "%' " &_
"OR Parking LIKE '%" & Parking & "%' OR Pet LIKE '%" & Pet & "%' AND status = TRUE "
jag testade att andra OR till and men de blir det som sa att den hittar den specifika posten, men om man bara valjer att soka m h a en dropdown sa funkar det inte, vill alltsa att man skall kunna soka med samtliga dropdowns OCH med en dropdown om man sa vill
Du får bygga upp sql-satsen successivt beroende på vilka select-listor som är använda.
Period = request.form("period")
PriceRange = request.form("PriceRange")
Bedrooms = request.form("Bedrooms")
Bathrooms = request.form("Bathrooms")
Furnished = request.form("Furnished")
Parking = request.form("Parking")
Pet = request.form("Pet")
SQL="SELECT * FROM sublets WHERE '1' = '1'"
if Period <> "defaultvärde" then
SQL = SQL & " and Period LIKE '%" & Period & "%'"
end if
if PriceRange <> "defaultvärde" then
SQL = SQL & " and Price LIKE '%" & PriceRange & "%'"
end if
'osv..
Där "defaultvärde" är det som står i selectlistorna om de inte ändras.
$data = "";
foreach ($_GET as $key => $value) {
if (substr($key, 0, 1) != "S")
continue;
$key = substr($key, 1); // Tar bort S.
$data .= "AND $key LIKE '%$value%' ";
}
$data = substr($data, 4); // Tar bort det första AND om det inte ska vara något annat villkor först.
$SQL = mysql_query("SELECT * FROM tabell WHERE $data") or die (mysql_error());
Finns inget som hindrar dig från att översätta om du vill. Principen förstår man ju i alla fall. Meleas lösning är helt klart både smidigare och snyggare än mitt taffliga (men fungerande :P) försök.
Period = request.form("SPeriod")
PriceRange = request.form("SPriceRange")
Bedrooms = request.form("SBedrooms")
Bathrooms = request.form("SBathrooms")
Furnished = request.form("SFurnished")
Parking = request.form("SParking")
Pet = request.form("SPet")
strSQL = "SELECT * FROM sublets WHERE "
For Each Item In Request.Form
If Left(Item,1) = "S" AND Not Request.Form(Item) = "" Then
strSQL = strSQL & LCase(Right(Item,Len(Item)-1)) & " LIKE '%" & LCase(Right(Item,Len(Item)-1)) & "%' AND "
End If
Next
strSQL = strSQL & "Status = True"
Nu borde strSQL se ut som nåt liknande din hårdkodade SQL-sats fast dom droplists som inte har nåt värde står inte med.
Men jag reserverar mig för eventuella felaktigheter pga att jag inte kan testa ;)
Du skulle även byta namn på alla selectlistor så att de har samma namn som kolumnen i din tabell (fast med ett inledande "s"). Om du provar att skriva ut sql-satsen istället för att exekvera den, hur ser den ut då?
SELECT * FROM sublets WHERE period LIKE '%period%' AND pricerange LIKE '%pricerange%' AND bedrooms LIKE '%bedrooms%' AND bathrooms LIKE '%bathrooms%' AND furnished LIKE '%furnished%' AND parking LIKE '%parking%' AND pet LIKE '%pet%' AND Status = True
Microsoft JET Database Engine error '80040e0c'
Command text was not set for the command object.
/sublets.asp, line 246
har andrat s mot x, det verkar som att den inte far in ett varde i sql fragan, jag satte bathrooms till 2, men i sql fragan star det bathrooms, och nar jag skriver ut request.form bathrroms sa far jag vardet 2, sa??
det forsta du namnde funkade inte sa jag valde att byta ut sql fragan mot den andra du postade, da fick jag detta:
SELECT * FROM sublets WHERE period LIKE '%Select Period%' AND pricerange LIKE '%Select Range%' AND bedrooms LIKE '%1%' AND bathrooms LIKE '%Bathrooms%' AND furnished LIKE '%Select Option%' AND parking LIKE '%Select Option%' AND pet LIKE '%Select Option%' AND Status = True
Microsoft JET Database Engine error '80040e0c'
Command text was not set for the command object.
/sublets.asp, line 253
nu fick den i a f in ett varde i bedrooms men vart kommer felmeddelandet ifran??
Felmeddelandet betyder att du försöker exekvera något som inte är en SQL-fråga. Du kallar din variabel med frågan för strSQL, jag kan ge mig på att det inte är den du försöker köra med Execute.