Bij het invoeren van een zoekterm, lukt het wel om te zoeken met één zoekterm, maar zodra ik er twee of meer invoer, word er alleen op de laatste zoekterm gezocht. Hoe kan ik ervoor zorgen dat beide zoektermen (weliswaar gescheiden) in de description voorkomen.

Alvast bedankt!

<?php
include_once "scripts/connect_all.php";
$button = $_GET ['submit'];
$search = preg_replace('#[^a-z 0-9?!%]#i', '', $_GET['fid']);

if(strlen($search)<=1)
echo "Search term too short";
else{
echo "You searched for <b>$search</b> <hr size='1'></br>";

$search_exploded = explode(" ", $search);

foreach($search_exploded as $search_each);

{
$x = 0;
$x++;
if($x==1)
$construct ="description LIKE '%$search_each%'";
else
$construct ="AND description LIKE '%$search_each%'";
$constructs ="SELECT * FROM feeds WHERE $construct AND $construct";
}


$constructs ="SELECT * FROM feeds WHERE $construct";

$run = mysql_query($constructs);

$foundnum = mysql_num_rows($run);

if ($foundnum==0)
echo "Sorry, there are no matching result for <b>$search</b>.</br></br>1.
Try more general words. for example: If you want to search 'how to create a website'
then use general keyword like 'create' 'website'</br>2. Try different words with similar
meaning</br>3. Please check your spelling";
else
{

echo "$foundnum results found !<p>";

$per_page = 10;
$start=0;//some default value
if(isset($_GET['start']))
$start=$_GET['start'];
$max_pages = ceil($foundnum / $per_page);
if(!$start)
$start=0;
$getquery = mysql_query("SELECT * FROM feeds WHERE $construct LIMIT $start, $per_page");

while($runrows = mysql_fetch_assoc($getquery))
{
$title = $runrows ['title'];
$desc = $runrows ['description'];
$link = $runrows ['link'];

echo "
<a href='$link'><b>$title</b></a><br>
$desc<br>
<a href='$link'>$link</a><p>
";

}

?>
In een loop zal ie altijd in de if() gaan want x zal altijd 1 zijn..

$x = 0;
$x++;
if($x==1)
Je hebt nu een foreach die meerdere queries uitvoert, maar met wat stringoperaties kun je dat vereenvoudigen tot één query.


<?php
// String is:
//   foo bar dingbat
$search = 'foo bar dingbat';
// String wordt:
//   foo% OR description LIKE %bar% OR description LIKE %dingbat
$search = str_ireplace(' ', '% OR description LIKE %', $search);
// Query wordt:
//   SELECT * FROM feeds WHERE description LIKE %foo% OR description LIKE %bar% OR description LIKE %dingbat%
$query = 'SELECT * FROM feeds WHERE description LIKE %' . $search . '%';
?>

Kijk verder ook eens naar een full-text search.
Voor elke zoekterm (gescheiden door een spatie dus) moet je een stukje bij je query aanplakken.

$sql = "SELECT * FROM feeds WHERE ";

<?php
foreach ($search_exploded as $id => $keyword){
// controleren of dit de eerste keyword is
if ($id == 0){
$sql .= " description LIKE '%".$keyword."%'";
}else{
$sql .= " AND description LIKE '%".$keyword."%'";
}
}
// op dit punt zou je query klaar moeten zijn.
?>
Bedankt voor jullie snelle reacties het is gelukt!

[size=xsmall]Toevoeging op 10/12/2013 10:58:40:[/size]

Nog even een vraagje:

Kan ik naast de kolom van description ook tegelijkertijd in een andere kolom zoeken, zoals title.

<?php $constructs .= "description LIKE '%".$keyword."%' OR title LIKE '%".$keyword."%'";
?>

Dit bovenstaande gaat niet werken, want dan wordt er alleen op het eerste keyword gezocht.

Reageren