28. april 2005 - 13:54Der er
13 kommentarer og 1 løsning
Problemer med query / join
Hej,
Jeg er igang med at tilføje en søgefunktion på mit site, men kan ikke få det helt til at spille...
Problemet er, at jeg tilsyneladende ikke kan søge specifikt på et sprog (vha variablen $sprog) i min query. Der kommer ingen fejl, men bare ikke nogle resultater...
Kan I gennemskue, hvad der er galt med min query?
// Tager højde for sprog if($_SESSION[sprog] == '1') { $sprog = $_SESSION[vis_sprog]; } else { $sprog = '1'; }
include("admin/connect.php"); $q_searchresults = mysql_query("SELECT * FROM varer_flex INNER JOIN varer_vg ON varer_flex.vareid = varer_vg.vareid WHERE varer_flex.varenavn LIKE '%$_GET[search_string]%' AND varer_vg.sprog = '$sprog'"); $num_rows_search = mysql_num_rows($q_searchresults);
prøv evt i første hug at skrive din sql ud så kan vi se om den er som du tror den er -- $sql = "SELECT * FROM varer_flex INNER JOIN varer_vg ON varer_flex.vareid = varer_vg.vareid WHERE varer_flex.varenavn LIKE '%$_GET[search_string]%' AND varer_vg.sprog = '$sprog'"; echo "$sql"; $q_searchresults = mysql_query($sql) or die(mysql_error());
er varer_vg.sprog et tal eller en streng...hvis det er et tal så prøv fjerne ' omkring det så det bliver $sql = "SELECT * FROM varer_flex INNER JOIN varer_vg ON varer_flex.vareid = varer_vg.vareid WHERE varer_flex.varenavn LIKE '%$_GET[search_string]%' AND varer_vg.sprog = $sprog";
varer_vg.sprog er et tal. Jeg har forsøgt med $sprog istedet for '$sprog', men der sker nøjagtig det samme. Ellers et godt bud, som jeg ikke selv havde tænkt på.
Jeg kan faktisk se, at $sprog har værdien 1 hele tiden. Det forstår jeg ikke, for der hvor jeg i starten af koden tager højde for sproget ved hjælp af sessions, der virker det fint nok. Jeg kan vælge sprog på mit site, og hvis jeg eksempelvis vælger engelsk, så har $_SESSION[vis_sprog] værdien 2 (dansk er 1). Jeg ved ikke hvorfor den ikke fanger den i toppen....
Det er fint nok at $_SESSION[vis_sprog] skifter værdi afhængig af sproget Men du tester jo på $_SESSION[sprog] om den er 1 Hvis den aldrig er 1 eller aldrig er sat...så går det galt Måske mener du i virkeligheden ---- if($_SESSION[vis_sprog] != "") { $sprog = $_SESSION[vis_sprog]; } else { $sprog = '1'; }
Det fungerer egentlig sådan, at hvis $_SESSION[sprog] == '1', så er sprogmodulet i brug, og så vil $_SESSION[vis_sprog] indeholde variablen, der fortæller hvilket sprog det er der bruges.
Det er af samme årsag, at der derfor skal kunne søges på dansk, engelsk, tysk osv.
Hvis $_SESSION[sprog] != '1', så er modulet ikke i brug, og så vil den danske version blive vist.
Ok..egentlig er det vel et overflødig tjek...at tjekke om der skal tjekkes for sprog...istedet for kun at tjekke om der er valgt et vis_sprog og hvis ikke så bruge dansk ;o)
Men prøv at lure din if sætning for det må jo være der det kokser Lav evt sådan her så du kan se fejlen if($_SESSION[sprog] == '1') { $sprog = $_SESSION[vis_sprog]; echo"Der er valgt et sprog og det er: $sprog"; } else { $sprog = '1'; echo"Der er ikke valgt et sprog, der vælges derfor: $sprog"; }
$q_searchresults = mysql_query("SELECT * FROM varer_flex INNER JOIN varer_vg ON varer_flex.vareid = varer_vg.vareid WHERE varer_flex.varenavn LIKE '%$_GET[search_string]%' AND varer_vg.sprog = $sprog AND varer_flex.sprogid = $sprog");
Jeg har registreret sprogid'et i begge de to tabeller, der joines, men spurgte kun efter det i den ene af dem. En vare kan godt være oprettet på flere sprog, og vil dermed være at finde to gange - og det er derfor sprogid'et skal registreres begge steder.
Du brugte noget tid på det - kom med et svar. Steen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.