Hej
Jag har två tabeller sidor och mallar med fälten sida_id, sida_kod, sida_mall i sidor och mall_id, mall_kod i mallar.
Jag vill att min sokfråga plockar ut alla sidor som innehåller en viss sökfras eller om en mall_innehåller sokfrasen så ska även den sidan plockas med om det finns en sida som utnyttjar den mallen.
Hur gör man detta? Kanske inte äns går i en sql-fråga??
K@llenMedlem sedan mars 20032 667 inlägg Finns det någon relation mellan de två tabellerna?
Om det finns en relation skulle du kunna använda en left join.
Det är en access databas men jag har inte gjort någon relation i access.
Men på tabellen sidor så finns det ett fält sida_mallID där id på mallen som sidan använder.
LarsGMedlem sedan dec. 200012 464 inlägg select *
from sidor
where sida_kod like '%<det du vill söka efter>%'
or sida_mall in (select mall_id
from mallar
where mall_kod like '%<det du vill söka efter>%')
LarsG om ingen sida använder den mallen plockas den ändå ut då?
K@llenMedlem sedan mars 20032 667 inlägg SELECT sida_id, sida_kod, sida_mall, mall_id, mall_kod
FROM sida s
LEFT JOIN mall m
ON s.sida_mallID = m.sida_mallID
WHERE field1 LIKE '%" & searchString & "%'
Jämförelsen bör göras på båda sidor, men jag vet inte vilka fält du vill använda.
Detta verkar fungera fin fint enligt mina tester i alla fall:
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
"FROM sidor " &_
"WHERE sida_publicering = 1 " &_
"AND sida_kod LIKE '%kontaktupg%' " &_
"OR sida_mall IN (SELECT mall_id " &_
"FROM mallar " &_
"WHERE mall_kod LIKE '%kontaktupg%')"
SET sidorRS = Con.Execute( sqlString )
Återkommer om det inte skulle fungera helt klockrent.
LarsGMedlem sedan dec. 200012 464 inlägg Jag skulle nog lägga till lite parenteser i where. Vill du ha
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
"FROM sidor " &_
"WHERE sida_publicering = 1 " &_
"AND (sida_kod LIKE '%kontaktupg%' " &_
"OR sida_mall IN (SELECT mall_id " &_
"FROM mallar " &_
"WHERE mall_kod LIKE '%kontaktupg%'))"
SET sidorRS = Con.Execute( sqlString )
eller
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
"FROM sidor " &_
"WHERE (sida_publicering = 1 " &_
"AND sida_kod LIKE '%kontaktupg%' ) " &_
"OR sida_mall IN (SELECT mall_id " &_
"FROM mallar " &_
"WHERE mall_kod LIKE '%kontaktupg%'))"
SET sidorRS = Con.Execute( sqlString )
?
Varför paranteserna?
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
"FROM sidor " &_
"WHERE sida_publicering = 1 "
IF specialMall = 1 THEN
sqlString = sqlString &_
"AND sida_kod LIKE '%"&sokfras&"%' " &_
"OR sida_mall IN (SELECT mall_id " &_
"FROM mallar " &_
"WHERE mall_kod LIKE '%"&sokfras&"%')"
END IF
IF specialmall = 0 AND mallID <> 0 THEN
sqlString = sqlString &_
"AND sida_mall = " & mallID
END IF
SET sidorRS = Con.Execute( sqlString )
Så ser hela satsen ut. Ska jag fortfarande lägga in paranteserna?
Vad är paranteserna till för då?
K@llenMedlem sedan mars 20032 667 inlägg
Addeladde skrev:
Vad är paranteserna till för då?
För att den ska prova alla OR. Annars avbryter den vid den första OR som ger träff.
LarsGMedlem sedan dec. 200012 464 inlägg Det är samma skillnad som mellan
(a and b) or c (1)
och
a and (b or c) (2)
Om man skriver
a and b or c (3)
så finns det visserligen en förutbestämd ordning så att det tolkas som ett av ovanstående. Kan du svara på om (3) är samma sak som (1) eller (2)?
Hur ska jag sätta mina paranteser i min sql-fråga då så att alla sidor och mallar uppdateras?
sqlString = "SELECT sida_kod, sida_mall, sida_publicering, sida_titel, sida_forfattare, sida_datum_start, sida_datum_slut, sida_indexera, sida_nyckelord, sida_id " &_
"FROM sidor " &_
"WHERE sida_publicering = 1 "
IF specialMall = 1 THEN
sqlString = sqlString &_
"AND sida_kod LIKE '%"&sokfras&"%' " &_
"OR sida_mall IN (SELECT mall_id " &_
"FROM mallar " &_
"WHERE mall_kod LIKE '%"&sokfras&"%')"
END IF
IF specialmall = 0 AND mallID <> 0 THEN
sqlString = sqlString &_
"AND sida_mall = " & mallID
END IF
SET sidorRS = Con.Execute( sqlString )