Avatar billede steenolsen1 Nybegynder
28. april 2005 - 13:54 Der 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);
       
        // Hvis ingen søgeresultater
        if($num_rows_search < '1') {
            echo $shoptekster[no_search_results];
        } else {
            // Viser søgeresultater
            echo $shoptekster[search_results].'<br>';
            while($searchresults = mysql_fetch_assoc($q_searchresults)) {
                if($sprog == $searchresults[sprogid]) {
                    echo '&#9642; <a href="index.php?menu=visvare&vgid='.$searchresults[vgid].'&vareid='.$searchresults[vareid].'">'.$searchresults[varenavn].'<br>';
                }
            }
        }
        mysql_close($connection);
Avatar billede busschou Praktikant
28. april 2005 - 14:19 #1
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());
Avatar billede steenolsen1 Nybegynder
28. april 2005 - 14:33 #2
Det har jeg tjekket, og det ser rigtigt nok ud:

SELECT * FROM varer_flex INNER JOIN varer_vg ON varer_flex.vareid = varer_vg.vareid WHERE varer_flex.varenavn LIKE '%vare%' AND varer_vg.sprog = '1'
Avatar billede busschou Praktikant
28. april 2005 - 15:00 #3
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";
Avatar billede steenolsen1 Nybegynder
28. april 2005 - 15:28 #4
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å.

Desværre :-(
Avatar billede busschou Praktikant
28. april 2005 - 15:36 #5
skal lige være sikker..
Dit problem er at sql´en ikke vælger rigtig...problemet er ikke at $sprog altid ved en fejl ender med at blive 1 ?
Avatar billede steenolsen1 Nybegynder
28. april 2005 - 16:23 #6
Sorry - vare lige væk en lille times tid...

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....
Avatar billede busschou Praktikant
28. april 2005 - 16:33 #7
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';
}
Avatar billede steenolsen1 Nybegynder
28. april 2005 - 16:38 #8
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.
Avatar billede busschou Praktikant
28. april 2005 - 16:41 #9
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)
Avatar billede busschou Praktikant
28. april 2005 - 16:43 #10
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";
}
Avatar billede steenolsen1 Nybegynder
28. april 2005 - 17:14 #11
Kigger lige på det når jeg kommer hjem... Tak indtil videre :-)
Avatar billede steenolsen1 Nybegynder
03. maj 2005 - 09:07 #12
Så var den der vist....

        $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
Avatar billede busschou Praktikant
03. maj 2005 - 09:11 #13
oki doki.. godt det virker endelig :o)
Avatar billede steenolsen1 Nybegynder
03. maj 2005 - 09:41 #14
Ja :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester