Avatar billede jenscsj Nybegynder
20. juni 2006 - 09:50 Der er 3 kommentarer

Filtrering med lister?

Hej forum
Jeg er i gang med en filtreringsformular, der skal returnere poster fra en database (php + MySql)
Mit problem er at jeg ikke kan få min sql til a returnere de ønskede poster. Her er lidt forklaring:

Jeg bruger to lister

<select name="hovedgruppe">
      <option value="">Hovedgruppe ?</option>
      <option value="Bacteroides">Bacteroides spp.</option>
      <option value="Prevotella">Prevotella spp.</option>
      <option value="Porphyromonas">Porphyromonas spp.</option>
      <option value="Fusobacterium">Fusobacterium spp.</option>
      <option value="Corrodens">&quot;Corrodens-gruppen&quot;</option>
      <option value="Bestave">Bev&aelig;gelige stave</option>
      <option value="Leptotrichia">Leptotrichia m.m.</option>
      <option value="Closmobil">Clostridium og Mobiluncus</option>
    </select>

og

<select name="kanamycin">
      <option value="">Kanamycin ?</option>
      <option value="R">Resistent</option>
      <option value="s">Sensitiv</option>
      <option value="+">+: &gt; 90% positive (&lt; 10% negative)</option>
      <option value="d+">d+: &gt; 75-90% positive</option>
      <option value="d">d: ~ 25-75% positive</option>
      <option value="d-">d-: &lt; 10-25% positive</option>
      <option value="0">0: &lt; 10% positive (&gt; 90% negative)</option>
      <option value="v">V: variabel</option>
      <option value="ls">[ ]: langsomt eller svagt</option>
            </select>

Listen skal fungere sådan, at hvis man f.eks. vælger "Bacteroides" i 1. liste, men IKKE vælger noget i 2. liste, så skal Mysql returnere alle Bacteriodes-posterne. Det kan jeg ikke få den til.

Min MySQl forespørgsel ser foreløbig sådan ud:

<?
$database=mysql_connect("localhost", "******", "******");
mysql_select_db("*******", $database);
$foresp1 = mysql_query("SELECT * FROM anbakterier WHERE hovedgruppe='$hovedgruppe' AND kanamycin='$kanamycin'") or die(mysql_error());
while ($data1 = mysql_fetch_array($foresp1)) {
echo $data1[1];
echo "&nbsp;";
echo $data1[2];
echo "<br>";
}
?>

Problemet med denne forespørgsel er at min formular åbenbart ikke kan ignorere værdien hvis der ikke er valgt noget, men sender et eller andet videre fra 2. liste,  som så ikke matcher nogen poster i basen - derfor returneres der ingen poster.

Jeg er sikker på at der er en nem løsning, for der er jo mange websider der bruger denne form for indsnævring af valg. Håber I har fået nok oplysninger og kan hjælpe :-).
Mvh Jens
Avatar billede hjochums Nybegynder
20. juni 2006 - 21:37 #1
Du skal opbygge din SQL udfra hvilken valg der er lavet i selectboksene.

F.eks:

$arrSqlWhere = array();
if ($_POST['hovedgruppe']) { // Måske skal denne altid være med?
  $arrSqlWhere[] = "hovedgruppe='" . mysql_escape_string($_POST['hovedgruppe'] . "'";
}

// Hvis anden selectboks valgt og har indhold
if ($_POST['kanamycin']) {
  $arrSqlWhere[] = "kanamycin='" . mysql_escape_string($_POST['kanamycin'] . "'";
}

$sqlListe = "SELECT * FROM anbakterier WHERE " . join(" AND ", $arrSqlWhere);

Husk index'er på anbakterier tabellen :)
osv...
Avatar billede jenscsj Nybegynder
21. juni 2006 - 23:58 #2
Der er et lille problem med en parenteserne i dit eksempel, men jeg har fået løst mit problem med dit glimrende løsningsforslag - jeg er meget taknemmelig :-)
Avatar billede hjochums Nybegynder
22. juni 2006 - 08:19 #3
Ups, det gik lidt hurtigt :)
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
Computerworld tilbyder specialiserede kurser i database-management

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