webForumDet fria alternativet
Logga in / Bli medlem

Slå ihop 2 frågor!!

Databaser & SQL

12 svar · 714 visningar · startad av Salamana

Medlem sedan mars 2005158 inlägg
Frågan#1

De e en fråga å inte två som rubriken säger!!
Denna sql fungera ej som den ska..vilket många kanske ser direkt..vilket jag inte gör. Den fungerar hyffs men inte mer. Den skiter totalt i villkoret gällande restNamn samt "sql66"....men inget felmess!!

Ngn som vet hur jag ska skriva den eller göra???

[B]HÄR VISAR JAG FÖRST VAR VÄRDENA KOMMER IFRÅN[/B]
sql66=sql66&"restID IN (select restID from tbl_kategori where katID = "&kok2&") And"
rest = Request.Form("sok_rest")
ratt = Request.Form("sok_matratt")
kok2 = Request.Form("sok_kok")

If request.form("catering")="1" then
   sql44=sql44&" And catering=1"
End if
If request.form("utkorning")="1" then
   sql44=sql44&" And utkorning=1"
End if	
If request.form("avhamtning")="1" then
   sql44=sql44&" And avhamtning=1"
End if			

sql99 = "select restID, stadID, aktiv, restNamn, menyTyp from tbl_resturang 
where [B]restID IN(select restID from tbl_resturang where restNamn 
Like '%"&rest&"%' And stadID = "&request.querystring("stadID")&") 
And "&sql66&" [/B]  restID IN (select restID from tbl_meny_buffe where text 
like '%"&ratt&"%' AND menyTyp Like tbl_resturang.menyTyp) OR restID IN 
(select restID from tbl_vecka_utan where text like '%"&ratt&"%' AND 
menyTyp Like tbl_resturang.menyTyp) OR restID IN (select restID from 
tbl_vecka_med where menyTyp Like tbl_resturang.menyTyp AND text 
like '%"&ratt&"%' And vecka Like "&(DatePart("ww",now(),2,2))&")"&sql44&";"
set rs99 = conn.execute(sql99)
Medlem sedan jan. 20022 440 inlägg
#2

har du testat att skriva ut din fråga på slutet?

Response.Write sql99

Medlem sedan juni 200032 967 inlägg
#3

Den där koden borde ju inte gå att köra överhuvudtaget, eftersom raderna där du bygger sql99 inte avslutas med citationstecken.

Jag ser också att du har både or- och and-villkor. Ska det fungera får du gruppera or-villkoren med parenteser, annars får du inte det resultat du vill ha.

Medlem sedan mars 2005158 inlägg
#4

Du har helt rätt där Anders, klistrade in lite fel, SORRY!
Men nu har jag lagt in den exakt som den är, förrutom att jag har brytit koden för lättare läsning. (se ovan)
När jag skriver ut den ser den korrekt ut i mina ögon...men den uppfyller dock ej villkoren. Allt som har med "Or" att göra fungerar.
Jag har nu fetmarkerat der som den ej tar med i sökningen!

Medlem sedan juni 200032 967 inlägg
#5

Skriv ut sql-frågan, som CatZ föreslår.

Medlem sedan mars 2005158 inlägg
#6

Här kommer utskriften.

select restID, stadID, aktiv, restNamn, menyTyp from tbl_resturang where 
restID IN(select restID from tbl_resturang where restNamn Like '%Pizzeria 
Eden%' And stadID = 74) And restID IN (select restID from tbl_meny_buffe 
where text like '%Capriciosa%' AND menyTyp Like tbl_resturang.menyTyp) OR 
restID IN (select restID from tbl_vecka_utan where text like '%Capriciosa%' 
AND menyTyp Like tbl_resturang.menyTyp) OR restID IN (select restID from 
tbl_vecka_med where menyTyp Like tbl_resturang.menyTyp AND text like '%
Capriciosa%' And vecka Like 33) And catering=1;
Medlem sedan mars 2005158 inlägg
#7

Ingen som ser vad som är fel i frågan...???

Medlem sedan juni 200032 967 inlägg
#8

Förutom att Capricciosa är felstavat i SQL-frågan måste du gruppera dina villkor (eftersom du blandar AND och OR). Borde kunna se ut något sånt här:

select restID, stadID, aktiv, restNamn, menyTyp 
from tbl_resturang 
where 
	(restID IN(select restID from tbl_resturang where restNamn Like '%Pizzeria Eden%' 
		And stadID = 74) 
	And restID IN (select restID from tbl_meny_buffe where text like '%Capriciosa%' 
		AND menyTyp Like tbl_resturang.menyTyp))
	OR (restID IN (select restID from tbl_vecka_utan where text like '%Capriciosa%' 
		AND menyTyp Like tbl_resturang.menyTyp))
	OR (restID IN (select restID from tbl_vecka_med where menyTyp Like tbl_resturang.menyTyp AND 
		text like '%Capriciosa%' And vecka Like 33))
	And catering=1;

Du borde inte heller använda like när du ger ett exakt värde utan =. Like ska du använda för sökningar med wildcard.

Jag förstår inte heller varför du har med restID i alla delfrågor. Du har dessutom två likadana delfrågor, där du söker efter Capricciosa och menytyp.
Kanske den första ska bort?

(Jag är inte helt säker på att jag grupperat villkoren rätt, för jag är lite osäker på vad det egentligen är för resultat du vill ha ut.)

Medlem sedan mars 2005158 inlägg
#9

Ska testa ditt förslag så fort jag kommer hem till min burk.
Anledningen till att jag använder LIKE är att jag vill ha ut allt som innehåller det man angett som sökord. Sök på "ca" och den ska generera träffar på allt som innehåller "ca" i db.

Du säger att jag har två likadana delfrågor... Det kan stämmer inte. Jag går in i olika tabeller men söker efter samma ord i båda frågorna.

Det jag ska ha ut är följande.

Först går jag in i tbl_resturang och hämtar alla som heter "Pizzeria Eden" och som har stadID 74, här tar jag även med menyTyp...det kan vara 1, 2 eller 3.

Sedan är det menyTyp som anger vilken tabell som jag ska hämta ut allt från som innehåller ordet "Capricciosa".

Är menyTyp = 1 så ska den hämta data i "tbl_meny_buffe"
Är menyTyp = 2 så ska den hämta data i "tbl_vecka_utan"
Är menyTyp = 3 så ska den hämta data i "tbl_vecka_med"

Medlem sedan juni 200032 967 inlägg
#10

Sök på "ca" och den ska generera träffar på allt som innehåller "ca" i db.

Jo, jag förstår det. Men du använder även LIKE mellan kolumnnamnen i din join, och även när du skriver vecka like 33. Använd = när du gör exakta jämförelser.

Det kan stämmer inte. Jag går in i olika tabeller men söker efter samma ord i båda frågorna.

Jaså? Det är dessa jag menar:

restID IN(select restID from tbl_resturang where restNamn Like '%Pizzeria Eden%' 
		And stadID = 74) 
	And [b]restID IN (select restID from tbl_meny_buffe where text like '%Capriciosa%' 
		AND menyTyp Like tbl_resturang.menyTyp))[/b]
	OR ([b]restID IN (select restID from tbl_vecka_utan where text like '%Capriciosa%' 
		AND menyTyp Like tbl_resturang.menyTyp))[/b]

Men om det ska vara så, så ska det väl vara så. Du vet bättre vad du är ute efter. Det borde väl gå att så du har de villkoren först, och sedan har tre andra villkor, antingen namn Pizzeria Eden i stad 74, eller vilken restaurang som helst som serverar i vecka 33?

Nåja, jag förstår inte riktigt ändå, tror jag. =)

Medlem sedan mars 2005158 inlägg
#11

Hej igen Anders..har ej haft tillgång till min burk.

Har testat att gruppera som du skrev men resultatet blir detsamma.
Allt fungerar förrutom att den skiter totalt i restNamn samt stadID.

Förstår om de e svårt att fatta vad jag gör...men du har inget annat förslag på vad som gör att den hoppar över restNamn samt stadID??

Medlem sedan juni 200032 967 inlägg
#12

men du har inget annat förslag på vad som gör att den hoppar över restNamn samt stadID??

Prova att sätta parenteser så du sluter in hela dina OR-villkor.

Medlem sedan mars 2005158 inlägg
#13

Då var de dags igen..

Om man ska göra som Ander säger...sätta paranteser runt OR-vilkoren..

Hur/var gör man de??

select restID, stadID, aktiv, restNamn, menyTyp from tbl_resturang where restID IN(select restID from tbl_resturang where restNamn Like '%Hanssons krog%' And stadID = 82)
And restID IN (select restID from tbl_meny_buffe where text like '%fläskfile%' AND menyTyp = tbl_resturang.menyTyp)
OR restID IN (select restID from tbl_vecka_utan where text like '%fläskfile%' AND menyTyp = tbl_resturang.menyTyp)
OR restID IN (select restID from tbl_vecka_med where menyTyp = tbl_resturang.menyTyp AND text like '%fläskfile%' And vecka = 6);

267 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)