Hej!
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)
Några förslag?
Ursäkta för den usla formateringen!!
@ndersMedlem sedan juni 200032 969 inlägg Förslag 1: redigera koden så den går att läsa här på forumet.
Så...nu är de nog lite lättare att läsa...sorry
@ndersMedlem sedan juni 200032 969 inlägg Du har ju ingen join, utan du specificerar ju bara vilka tabeller som det ska hämtas ifrån. Det innebär att alla olika alternativ hämtas.
Varför har du åtta likadana tabeller :q
Hur skulle en join se ut här?
@ndersMedlem sedan juni 200032 969 inlägg Hänger tabellerna ihop med varandra överhuvudtaget?
Annars får du göra en UNION.
Alltså...alla de 8 hänger ju ihop med usertabellen. Men de hänger ju inte ihop sinsemellan..
@ndersMedlem sedan juni 200032 969 inlägg Vilka fält hänger ihop då, dvs vilka fält ska tabellerna knytas ihop med?
Men varför har du åtta likadana tabeller? Om jag vore du skulle lägga ihop dem till en, det skulle underlätta ofantligt mycket.
OK, ändrat här nu...nu finns det en tabell som heter som heter info. Den innehåller följande:
Id, Namn, Userid, Katid, Typ
Och en tabell som heter user.
Hur ska jag gå tillväga?
Nu ser koden ut såhär:
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)
Vad är de som är galet?
@ndersMedlem sedan juni 200032 969 inlägg På vilket sätt funkar det inte? Felmeddelande?
Är inte userid numeriskt?
Hur ser färdig SQL-fråga ut?
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
@ndersMedlem sedan juni 200032 969 inlägg 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
Ja, jag vill ju att den bara ska hitta användare som har Utveckla på Invfas1 och Norden på Geografi3...
Hur kommer det sig att det kommer upp många träffar när jag söker på userName = Henrik när det bara finns 1 sådan post?
@ndersMedlem sedan juni 200032 969 inlägg Finns det inte en post per Katid?
Nu har jag gjort om...
...Info innehåller nu:
Id, Namn, Userid, Typ
Sen har jag tagit bort: And info.Katid = 1,2,3,4 bakom varje...
Det kanske är lättare om du ser själva filerna. Jag kan inte skicka dem till dig?