Avatar billede asn24 Nybegynder
26. februar 2008 - 19:19 Der er 8 kommentarer og
1 løsning

Dynamisk sqlsætning

Hej eksperter.

Jeg har det problem at jeg ud fra et array skal sammensætte en søgning i min MySQL database.

Rækkerne i tabellen har flg. navne: 1,2,3,4,5 osv.. - Den skal søge efter samme key i dem alle. Men hvordan skal jeg sammensætte sqlstrengen så det kommer til at passe?

Mit nuværende ser nogenlunde sådan ud:

$sql = "SELECT * FROM `" . _MYSQl_DATASTORE_TABLE . "` WHERE";

efter det skal jeg have sat flg. ind:

"`$look` LIKE '%" . $key . "%'"

eller

"OR `$look` LIKE '%" . $key . "%'"

Den skal selv finde ud af hvilken der passer ind hvor, og hvor mange gange det skal gentages, samt hvad $look skal indeholde, ud fra et array der bliver bygget med en select der ser nogenlunde sådan ud:

<select name="area[]" multiple>
  <?php
    $column_names = mysql_query(select......);
    while($r = mysql_fetch_array($column_names)) {
  ?>
  <option value="<?=$id?>"><?=$name?></option>
  <?php
    }
  ?>
</select>


Håber jeg har beskrevet problemet godt nok, ellers må i spørge ind til det :)
Avatar billede coderdk Praktikant
26. februar 2008 - 21:45 #1
Kan du bruge et array? A la dette:

$where = array();
$where[] = "`$look1` LIKE '%" . $key1 . "%'";
$where[] = "`$look2` LIKE '%" . $key2 . "%'";
$where[] = "`$look3` LIKE '%" . $key3 . "%'";
$where = implode( " OR ", $where );
Avatar billede asn24 Nybegynder
26. februar 2008 - 22:06 #2
Desværre.. For jeg ved jo ligenetop ikke hvor mange gange jeg skal køre det igennem ..
Avatar billede showsource Seniormester
26. februar 2008 - 22:10 #3
Noget a'la'

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<select name="selectname[]" multiple>
    <option value="1">valg 1</option>
    <option value="2">Valg 2</option>
    <option value="3">Valg 3</option>
    <option value="4">Valg 4</option>
</select>
<input type="text" name="seek">
<input type="submit">

<br>
<?php

if(isset($_POST["selectname"]) && is_array($_POST["selectname"])) {

$antal = count($_POST["selectname"]);

$sql = "SELECT * FROM `tabel` WHERE ";

$a = 1;

    foreach($_POST["selectname"] as $key) {
    $sql .="`". $key ."` LIKE '%". $_POST["seek"] ."%'";

        if($a < $antal) {
        $sql .=", or ";
        }
    $a++;
    }   

echo $sql;

}

?>
Avatar billede asn24 Nybegynder
26. februar 2008 - 23:11 #4
Tusind tak skal du have!.. Det var faktisk meget mere simpelt end jeg havde regnet med.. Smid et svar og du skal få points :)
Avatar billede showsource Seniormester
26. februar 2008 - 23:30 #5
ingen point, ellers tak
Avatar billede asn24 Nybegynder
26. februar 2008 - 23:49 #6
Jamen, jeg siger mange tak så :)
Avatar billede coderdk Praktikant
27. februar 2008 - 00:41 #7
Det var så også det jeg mente ;P

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<select name="selectname[]" multiple>
    <option value="1">valg 1</option>
    <option value="2">Valg 2</option>
    <option value="3">Valg 3</option>
    <option value="4">Valg 4</option>
</select>
<input type="text" name="seek">
<input type="submit">
<br>
<?php

if(isset($_POST["selectname"]) && is_array($_POST["selectname"]))
{
  $sql = "SELECT * FROM `tabel` WHERE ";
  $where = array();
  foreach($_POST["selectname"] as $key)
  {
    $where[] = "`". $key ."` LIKE '%". $_POST["seek"] ."%'";
  } 
  $where = implode( " OR ", $where );
  echo $sql . $where;
}


Men lad nu det ligge ;)
Avatar billede asn24 Nybegynder
27. februar 2008 - 06:59 #8
Ah.. Sorry.. Forstod åbenbart ikke lige dit eksempel så.. hehe..
Avatar billede showsource Seniormester
27. februar 2008 - 08:08 #9
Jeg mente sgu nok der var noget "bøf" med det OR ! :O)
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