Jag har stora problem med en sökning som jag försökt att få ihop.
Jag har nio tabeller som jag ska söka igenom. Jag vet att databasen (mySQL) är direkt optimerad, eller rättare sagt, den är riktigt dåligt gjord. Men just nu har jag inte tid att ändra på den.
Som sagt, det är nio st tabeller som ska sökas igenom.
I 8 utav dem finns dessa kolumner:
Id, Namn, Userid, Katid
Den 9:nde tabellen är själva usertabellen.
Alla värden från själva sökningen skickas med en länk och ska sedan hämtas upp med hjälp av Request.QueryString.
Såhär ser min kod ut nu...(vet att den är galen)...får den inga träffar skriver den ut de, men om den får en träff, loopar den ut den träffen väldigt många gånger...
SQL = "Select info_befattning.Namn, info_befattning.katId, info_bransch.*, info_geografi.*, info_innovation.*, info_invbehov.*, info_invfas.*, info_sprak.*, user.* from info_befattning, info_bransch, info_geografi, info_innovation, info_invbehov, info_invfas, info_kat, info_sprak, user Where user.userId <> ''"
If Request.QueryString("userName") <> "" Then
SQL = SQL & " And user.userName Like '%" & Request.QueryString("userName") & "%'"
End If
If Request.QueryString("userLogin") <> "" Then
SQL = SQL & " And user.userLogin Like '%" & Request.QueryString("userLogin") & "%'"
End If
If Request.QueryString("userEmail") <> "" Then
SQL = SQL & " And user.userEmail Like '%" & Request.QueryString("userEmail") & "%'"
End If
If Request.QueryString("userPostort") <> "" Then
SQL = SQL & " And user.userPostort Like '%" & Request.QueryString("userPostort") & "%'"
End If
If Request.QueryString("userCountry") <> "" Then
SQL = SQL & " And user.userCountry Like '%" & Request.QueryString("userCountry") & "%'"
End If
If Request.QueryString("userLanguage") <> "" Then
SQL = SQL & " And user.userLanguage Like '%" & Request.QueryString("userLanguage") & "%'"
End If
If Request.QueryString("Invfas1") <> "" Then
SQL = SQL & " And info_invfas.Namn Like '%" & Request.QueryString("Invfas1") & "%' And info_invfas.Katid = 1"
End If
If Request.QueryString("Invbehov1") <> "" Then
SQL = SQL & " And info_invbehov.Namn Like '%" & Request.QueryString("Invbehov1") & "%' And info_invbehov.Katid = 1"
End If
If Request.QueryString("Innovation1") <> "" Then
SQL = SQL & " And info_innovation.Namn Like '%" & Request.QueryString("Innovation1") & "%' And info_innovation.Katid = 1"
End If
If Request.QueryString("Bransch1") <> "" Then
SQL = SQL & " And info_bransch.Namn Like '%" & Request.QueryString("Bransch1") & "%' And info_bransch.Katid = 1"
End If
If Request.QueryString("Geografi1") <> "" Then
SQL = SQL & " And info_geografi.Namn Like '%" & Request.QueryString("Geografi1") & "%' And info_geografi.Katid = 1"
End If
If Request.QueryString("Sprak1") <> "" Then
SQL = SQL & " And info_sprak.Namn Like '%" & Request.QueryString("Sprak1") & "%' And info_sprak.Katid = 1"
End If
If Request.QueryString("Invfas2") <> "" Then
SQL = SQL & " And info_invfas.Namn Like '%" & Request.QueryString("Invfas2") & "%' And info_invfas.Katid = 2"
End If
If Request.QueryString("Invbehov2") <> "" Then
SQL = SQL & " And info_invbehov.Namn Like '%" & Request.QueryString("Invbehov2") & "%' And info_invbehov.Katid = 2"
End If
If Request.QueryString("Innovation2") <> "" Then
SQL = SQL & " And info_innovation.Namn Like '%" & Request.QueryString("Innovation2") & "%' And info_innovation.Katid = 2"
End If
If Request.QueryString("Bransch2") <> "" Then
SQL = SQL & " And info_bransch.Namn Like '%" & Request.QueryString("Bransch2") & "%' And info_bransch.Katid = 2"
End If
If Request.QueryString("Geografi2") <> "" Then
SQL = SQL & " And info_geografi.Namn Like '%" & Request.QueryString("Geografi2") & "%' And info_geografi.Katid = 2"
End If
If Request.QueryString("Sprak2") <> "" Then
SQL = SQL & " And info_sprak.Namn Like '%" & Request.QueryString("Sprak2") & "%' And info_sprak.Katid = 2"
End If
If Request.QueryString("Bransch3") <> "" Then
SQL = SQL & " And info_bransch.Namn Like '%" & Request.QueryString("Bransch3") & "%' And info_bransch.Katid = 3"
End If
If Request.QueryString("Geografi3") <> "" Then
SQL = SQL & " And info_geografi.Namn Like '%" & Request.QueryString("Geografi3") & "%' And info_geografi.Katid = 3"
End If
If Request.QueryString("Befattning3") <> "" Then
SQL = SQL & " And info_befattning.Namn Like '%" & Request.QueryString("Befattning3") & "%' And info_befattning.Katid = 3"
End If
If Request.QueryString("Sprak3") <> "" Then
SQL = SQL & " And info_sprak.Namn Like '%" & Request.QueryString("Sprak3") & "%' And info_sprak.Katid = 3"
End If
If Request.QueryString("Bransch4") <> "" Then
SQL = SQL & " And info_bransch.Namn Like '%" & Request.QueryString("Bransch4") & "%' And info_bransch.Katid = 4"
End If
If Request.QueryString("Geografi4") <> "" Then
SQL = SQL & " And info_geografi.Namn Like '%" & Request.QueryString("Geografi4") & "%' And info_geografi.Katid = 4"
End If
If Request.QueryString("Befattning4") <> "" Then
SQL = SQL & " And info_befattning.Namn Like '%" & Request.QueryString("Befattning4") & "%' And info_befattning.Katid = 4"
End If
If Request.QueryString("Sprak4") <> "" Then
SQL = SQL & " And info_sprak.Namn Like '%" & Request.QueryString("Sprak4") & "%' And info_sprak.Katid = 4"
End If
SQL = SQL & " Order By user.userId"
Set users = Com.execute(SQL)
SQL = "SELECT * FROM user INNER JOIN info ON user.userId = info.Userid Where user.userId <> ''"
If Request.QueryString("userName") <> "" Then
SQL = SQL & " And user.userName Like '%" & Request.QueryString("userName") & "%'"
End If
If Request.QueryString("userLogin") <> "" Then
SQL = SQL & " And user.userLogin Like '%" & Request.QueryString("userLogin") & "%'"
End If
If Request.QueryString("userEmail") <> "" Then
SQL = SQL & " And user.userEmail Like '%" & Request.QueryString("userEmail") & "%'"
End If
If Request.QueryString("userPostort") <> "" Then
SQL = SQL & " And user.userPostort Like '%" & Request.QueryString("userPostort") & "%'"
End If
If Request.QueryString("userCountry") <> "" Then
SQL = SQL & " And user.userCountry Like '%" & Request.QueryString("userCountry") & "%'"
End If
If Request.QueryString("userLanguage") <> "" Then
SQL = SQL & " And user.userLanguage Like '%" & Request.QueryString("userLanguage") & "%'"
End If
If Request.QueryString("Invfas1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Invfas1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Invbehov1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Invbehov1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Innovation1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Innovation1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Bransch1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Bransch1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Geografi1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Geografi1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Sprak1") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Sprak1") & "%' And info.Katid = 1"
End If
If Request.QueryString("Invfas2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Invfas2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Invbehov2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Invbehov2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Innovation2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Innovation2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Bransch2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Bransch2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Geografi2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Geografi2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Sprak2") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Sprak2") & "%' And info.Katid = 2"
End If
If Request.QueryString("Bransch3") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Bransch3") & "%' And info.Katid = 3"
End If
If Request.QueryString("Geografi3") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Geografi3") & "%' And info.Katid = 3"
End If
If Request.QueryString("Befattning3") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Befattning3") & "%' And info.Katid = 3"
End If
If Request.QueryString("Sprak3") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Sprak3") & "%' And info.Katid = 3"
End If
If Request.QueryString("Bransch4") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Bransch4") & "%' And info.Katid = 4"
End If
If Request.QueryString("Geografi4") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Geografi4") & "%' And info.Katid = 4"
End If
If Request.QueryString("Befattning4") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Befattning4") & "%' And info.Katid = 4"
End If
If Request.QueryString("Sprak4") <> "" Then
SQL = SQL & " And info.Namn Like '%" & Request.QueryString("Sprak4") & "%' And info.Katid = 4"
End If
SQL = SQL & " Order By user.userId"
Set users = Com.execute(SQL)
Det som händer...
i tabellen info ligger det 15 poster med olika värden för Userid = 1.
När man söker på userName = Henrik, som är Userid = 1 får man 15 exakt likadana träffar.
Söker man på Invfas1 så får man bara 1 träff, men söker man på Invfas1 och Geografi2 (båda finns med UserId = 1) får man ingen träff...
SQL-satsen som blir när man bara söker på userName ser ut såhär:
SELECT * FROM user INNER JOIN info ON user.userId = info.Userid Where user.userId <> '' And user.userName Like '%Henrik%' Order By user.userId
Söker man på Invfas1 och Geografi3 ser SQL-satsen ut såhär:
SELECT * FROM user INNER JOIN info ON user.userId = info.Userid Where user.userId <> '' And info.Namn Like '%Utveckla%' And info.Katid = 1 And info.Namn Like '%Norden%' And info.Katid = 3 Order By user.userId
Det är inte så konstigt, eftersom du frågar efter poster där Katid är två olika värden samtidigt. Det går inte.
*) Ska du verkligen söka med olika sökord på alla fält?
*) Får man knasiga resultat av en SQL-fråga skall man skriva ut den färdiga frågan för att lättare se vad som är konstigt. (edit: ser att du redigerat in det nu.)
Är du säker på att du vill ha AND-villkor? Borde det inte vara OR, dvs:
SELECT * FROM user INNER JOIN info ON user.userId = info.Userid
Where user.userId <> '' And (info.Namn Like '%Utveckla%' And info.Katid = 1)
OR (info.Namn Like '%Norden%' And info.Katid = 3)
Order By user.userId