webForumDet fria alternativet

kombinerad sökning i flera kolumner?

PHP

5 svar · 575 visningar · startad av vela

Medlem sedan okt. 20079 inlägg
Frågan#1

Har gjort en enklare sökfunktion i php, som söker i en MySQL-databas. Som det är nu söker den bara i en kolumn. Jag skulle vilja ha ett sökfält där man kan skriva in ett sökord, men också tre andra drop-down, där man kan välja att avgränsa sökningen enligt vissa parametrar (eller kolumner då). Så att exempelvis, söker jag på "iogt-nto" i sökrutan, och väljer "skellefteå" i drop-down-rutan "Orter", så får jag således upp alla träffar på "iogt-nto" i "Skellefteå". På samma vis vill jag att man ska kunna avgränsa enbart med hjälp av drop-down-rutorna, så att man exv kan välja "nykterhetsförbund" i drop-down-rutan "Kategori" och "Skellefteå" i rutan "Ort", och således få träffar på alla nykterhetsförbund i Skellefteå.

(Precis som det är på den här sidan: https://www.fauppsala.se/sok.php)

Är det någon som kanske kan hjälpa till lite?

Här är lite kod.


<form name="form" action="soek.php" method="get">
  <input type="text" name="q" />
  <input type="submit" name="Submit" value="Sök" />
</form>

<?php

  $var = @$_GET['q'] ;
  $trimmed = trim($var); 

$limit=10; 

if ($trimmed == "")
  {
  echo "<p>Skriv in ett sökord...</p>";
  exit;
  }

if (!isset($var))
  {
  echo "<p>We dont seem to have a search parameter!</p>";
  exit;
  }

$opendb = mysql_connect("host","user","passwd"); 

mysql_select_db("databas") or die("Unable to select database"); 

$query = "select * from tabell where kolumn1 like \"%$trimmed%\"  
  order by kolumn1"; 

 $numresults=mysql_query($query);
 $numrows=mysql_num_rows($numresults);

  if (empty($s)) {
  $s=0;
  }

  $query .= " limit $s,$limit";
  $result = mysql_query($query) or die("Couldn't execute query");

echo "<p>Du sökte efter: &quot;" . $var . "&quot;</p>";

echo "Organisationer funna:";
echo "<br />";
echo "<br />";

$count = 1 + $s ;

  while ($row= mysql_fetch_array($result)) {
   
     echo $row['kolumn1'].". ";
     echo "<br />";
     }

Tack på förhand,
/victor

Medlem sedan okt. 20079 inlägg
#2

Hm, tråden kanske hör bättre hemma i php-forumet?

Medlem sedan dec. 200012 464 inlägg
#3

Jo, det är mer en scriptfråga än SQL.

I p(seudo)hpkod skulle man kunna göra så här

   $query = "select <kolumner> from tabell where 1 = 1 ";
   if  (isset($dropdown1))
   {
         $selectionValue = ...;
         $query .= "and c1 = '" . $selectionValue . "'";
    }
   if  (isset($dropdown2))
   {
         $selectionValue = ...;
         $query .= "and c2 = '" . $selectionValue . "'";
    }

Flyttas från SQL

Medlem sedan okt. 20079 inlägg
#4

Tack LarsG (vilket min farbror för övrigt också heter) för ett bra svar. Återstår bara att förstå hur jag ska tillväga med det. Återkommer säkerligen med fler frågor...:)

Medlem sedan okt. 20079 inlägg
#5

Jag känenr mig lite dum...men jag förstår inte riktigt.

- Måste queryn vara annorlunda, än den är i den kod jag urpsurngligen använt mig av?

- $selectionValue, ska det definieras nånstans? Och isf hur?

- Och $dropdown1 -och 2, hur definierar jag dom?

Förlåt om mina frågor är dumma, men ibland måste man ju verkligen ställa sådana ibland.

Medlem sedan mars 20034 471 inlägg
#6

För att återgå till din ursprungliga fråga, var lagrar du det innehåll du vill ha i drop-down boxarna? Om de finns i en databas får du göra något i stil med detta. (Om orterna lagras i tabell Orter och har kolumnerna id och ort, Kategori har kolumnerna id och kat.)

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>
<select name="ort">
<?php
$sql="SELECT * FROM Orter";
$res = mysql_query($sql) or die("Ortstrul");
while ($row=mysql_fetch_array($res)) {
   echo '<option value="'.$row['id'].'">"'.$row['ort'].'"</option>";
} ?>
</select>
<select name="kat">
<?php
$sql="SELECT * FROM Kategori";
$res = mysql_query($sql) or die("Kategoristrul");
while ($row=mysql_fetch_array($res)) {
   echo '<option value="'.$row['id'].'">"'.$row['kat'].'"</option>";
} ?>
</select>....</form>

<?php
$where == ""
if (isSet($_POST["ort"]))
   $where = "OrtID = ".$_POST["ort"];
if (isSet($_POST["kat"])) {
   if ($where == "")
      $where = "KatID = ".$_POST["kat"];
   else $where .= " AND OrtID = ".$_POST["ort"];
}
$sql = "SELECT * FROM Tabell WHERE $where";
$res = mysql_query($sql) or die("sökstrul");
//Visa resultaten....
?>
335 ms totalt · 4 externa anrop · v20260731065814-full.20824b9f
196 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)