Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:22 Der er 22 kommentarer og
1 løsning

En løkke i en SQL forespørgsel

Hejsa.

Er det muligt at lave en løkke inde i en sql-forespørgsel? Mit problem lyder således:

Jeg har et array med et uvidst antal ord i. Så kunne jeg godt tænke mig at søge i min database på hvert enkelt ord.

min kode ser indtil vedere sådan ud :

$emne = $_GET[searchword];
$soegeord = $_GET[searchquery];
$soegeord_opdelt = str_replace(" ",":",$soegeord);
$soegeord_liste = explode(":", $soegeord_opdelt);

if ($emne == kunstner)
{
if ($soegeord == "")
  {
    echo "Du skal indtaste et søgeord!";
    exit;
    }

$kunstnerquery = mysql_query("SELECT * FROM hjba_kunstner WHERE hjba_kunstn_navn = '$soegeord'");
$kunstnerarray = mysql_fetch_row($kunstnerquery);
$vaerkquery = mysql_query("SELECT * FROM hjba_kunstvaerk WHERE hjba_kunstv_kunstner_id = '$kunstnerarray[0]'");

$resultater = mysql_numrows($vaerkquery);

if ($resultater == 0)
  {
    echo "Søgningen gav ingen resultater!";

Jeg havde tænkt mig at jeg kunne bruge count() til at tælle antal "pladser" i arrayet, men jeg er ikke sikker på hvordan jeg skal lave det loop der putter hvert ord i arrayet ind i sql-sætningen.

Så hvis i har en løsning på mit problem har jeg nogle dejlige points til jer :D

På forhønd tak for hjælpen
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 22:26 #1
Hvad med at lave en

SELECT * FROM hjba_kunstner WHERE hjba_kunstn_navn in ('hansen','sørensen','pihl')
Avatar billede repsak Nybegynder
12. oktober 2003 - 22:27 #2
hvad med noget ala:

SELECT * FROM bla WHERE
for hvert ord i arrayet
  tilføj ord='mus' OR

GOGO
(jeg kan ikke PHP så jeg kan ikke skrive det for dig, men det er vel også mere en idé du har brug for)
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:28 #3
jeg skal have den til at lede efter hvert ord i arrayet $soegeord_liste
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 22:30 #4
HVordan afviger vores forslag fra det du ønsker?
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:32 #5
altså... en bruger indtaster nogle tilfældige søgeord. Søgestrengen indeles i et array med et ord på hver plads. herefter skal sql-forespørgslen hente alle de poster der indeholder bare et af de indtastede ord.
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:35 #6
Jeg skal vel på en eller anden måde tælle antallet af pladser i arrayet og gemme det tal i en variabel, som jeg så kalder i sql-sætningen.

derfor tænkte jeg noget a-la
_
$antal_pladser = count($soegeord_liste);

og så en sql-sætning der ser hvor mange pladser der er i arrayet og søger efter samtlige ord i arrayet. <--- det er her jeg står af :|
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 22:35 #7
indeholder.... er det så ikke forkert af dig at bruge = ? Skulle det ikke være LIKE ?
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:38 #8
jo måske er det en bedre løsning, men det var ikke det der var mit største problem
Avatar billede repsak Nybegynder
12. oktober 2003 - 22:41 #9
forstår ikke hvorfor du vil have count med i SQL...???
Avatar billede erikjacobsen Ekspert
12. oktober 2003 - 22:44 #10
Hvad er så problemet? Kan du give et eksempel på det du ønsker?
Avatar billede detox Nybegynder
12. oktober 2003 - 22:45 #11
Jeg synes repsac har fat i noget der. Du kunne fx bygge det op sådan her:

$arr = array('abe','hund','svin');
$search = "SELECT * FROM tabel WHERE ";
foreach($arr as $item) {
    $search .= "hjba_kunstn_navn LIKE '$item' OR ";
}
$search = substr($search, 0, strlen($search)-4);
$res = mysql_query($search);
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 22:47 #12
Det tror jeg lige at jeg prøver.
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 23:00 #13
Nå ... nu siger den fejl.

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in [filnavn] on line 30

$kunstnerquery = "SELECT * FROM hjba_kunstner WHERE";
foreach($soegeord_liste as $element)
  {
    $kunstnerquery .= "hjba_kunstn_navn LIKE '$element' OR";
    }
$kunstnerquery = substr($kunstnerquery, 0, strlen($kunstnerquery)-4);
$res = mysql_query($kunstnerquery);

$kunstnerarray = mysql_fetch_row($res); //linje 30
$vaerkquery = mysql_query("SELECT * FROM hjba_kunstvaerk WHERE hjba_kunstv_kunstner_id = '$kunstnerarray[0]'");

$resultater = mysql_numrows($vaerkquery);

og lige en ting mere...

hvad præcis gør denne linie

$kunstnerquery = substr($kunstnerquery, 0, strlen($kunstnerquery)-4);
Avatar billede detox Nybegynder
12. oktober 2003 - 23:03 #14
Så prøv med 'or die':

$res = mysql_query($kunstnerquery) or die(mysql_error());
Avatar billede detox Nybegynder
12. oktober 2003 - 23:04 #15
Du mangler osse et mellemrum her:

$kunstnerquery = "SELECT * FROM hjba_kunstner WHERE";

$kunstnerquery = "SELECT * FROM hjba_kunstner WHERE ";
Avatar billede detox Nybegynder
12. oktober 2003 - 23:05 #16
Og her:

$kunstnerquery .= "hjba_kunstn_navn LIKE '$element' OR ";
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 23:08 #17
okay. nu er den der, men der kommer bare ikke noget ud på skærmen... det finder jeg selv ud af. Tak for hjælpen. smider du lige et svar så du kan få de velfortjente points?
Avatar billede detox Nybegynder
12. oktober 2003 - 23:17 #18
$kunstnerquery = substr($kunstnerquery, 0, strlen($kunstnerquery)-4);
Afkorter $search med 4 tegn (' OR '). Du har en anden lille slåfejl her:
$resultater = mysql_numrows($vaerkquery); Skal være:
$resultater = mysql_num_rows($vaerkquery);

PS: Synes repsac fortjener havldelen af pointsene, da det var hans idé.
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 23:18 #19
hehe jeg tror ikke at man kan dele dem op, men eller kan du vel tildele ham dem på en eller anden måde :D
Avatar billede detox Nybegynder
12. oktober 2003 - 23:21 #20
Ja, jeg kan lave et nyt indlæg med 30 p. Hvis du vil repsac.
Avatar billede exp Juniormester
12. oktober 2003 - 23:33 #21
Avatar billede kaptajnknark Nybegynder
12. oktober 2003 - 23:36 #22
ja okay :D

Det er bare lidt sent nu desværre, men så kan jeg huske det til næste gang
Avatar billede detox Nybegynder
12. oktober 2003 - 23:37 #23
repsac -> Jeg har lavet et spørgsmål til dig her:
http://www.eksperten.dk/spm/413163
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

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



IT-JOB