Ciao, scusa se ti disturbo... Ho ancora qualche problema, nel senso che la query non funziona.
Puoi dare uno sguardo alla funziona che estrae i risultati? il problema sta nel st=2
Codice PHP:
function CreaQueryRicerca($queryvar, $pesotitolo=5, $pesotesto=3, $searchlevel=1, $st)
{
// trasformo la stringa in un array di parole da cercare
$arrayToFind=QueryToArray($queryvar);
// numero elementi da cercare
$elementiToFind=count($arrayToFind);
// punteggio massimo raggiungibile
$maxPoint=$elementiToFind*$pesotitolo+$elementiToFind*$pesotesto;
if($elementiToFind==0)
{
return "";
} else {
$query="SELECT 'portali' as tabella, ROUND((";
$query2="SELECT 'programmi' as tabella, ROUND((";
$sqlwhere="";
$sqlwhere2="";
// ciclo per ogni parola trovata ($Valore)
foreach($arrayToFind As $Indice => $Valore)
{
// se $Valore è presente in titolo instr(titolo, '$Valore') restituirà 1 altrimenti 0
// moltiplico il valore restituito (1 o 0) per il peso della parola (5 per il titolo, 3 per testo)
if($st == "1")
{
if($searchlevel==1)
{
// regexp: uso espressioni regolari. [[:<:]] equivale a \b per separare parole
$query.="((title REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotitolo+";
$query.="((text REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotesto+";
$sqlwhere.="title REGEXP '[[:<:]]".$Valore."[[:>:]]' OR text REGEXP '[[:<:]]".$Valore."[[:>:]]' OR ";
} else {
$query.="(instr(title, '$Valore')>0)*$pesotitolo+";
$query.="(instr(text, '$Valore')>0)*$pesotesto+";
$sqlwhere.="title like '%$Valore%' OR text like '%$Valore%' OR ";
}
}
else if($st == "2")
{
if($searchlevel==1)
{
// regexp: uso espressioni regolari. [[:<:]] equivale a \b per separare parole
$query.="((tab1.title REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotitolo+";
$query2.="((tab2.title REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotitolo+";
$query.="((tab1.text REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotesto+";
$query2.="((tab2.text REGEXP '[[:<:]]".$Valore."[[:>:]]')>0)*$pesotesto+";
$sqlwhere.="tab1.title REGEXP '[[:<:]]".$Valore."[[:>:]]' OR tab1.text REGEXP '[[:<:]]".$Valore."[[:>:]]' ";
$sqlwhere2.="tab2.title REGEXP '[[:<:]]".$Valore."[[:>:]]' OR tab2.text REGEXP '[[:<:]]".$Valore."[[:>:]]' ";
} else {
$query.="(instr(tab1.title, '$Valore')>0)*$pesotitolo+";
$query2.="(instr(tab2.title, '$Valore')>0)*$pesotitolo+";
$query.="(instr(tab1.text, '$Valore')>0)*$pesotesto+";
$query2.="(instr(tab2.text, '$Valore')>0)*$pesotesto+";
$sqlwhere.="tab1.title like '%$Valore%' OR tab1.text like '%$Valore%' ";
$sqlwhere2.="tab2.title like '%$Valore%' OR tab2.text like '%$Valore%' ";
}
}
}
$sqlwhere=substr($sqlwhere, 0, strlen($sqlwhere)-4);
// calcolo la percentuale di rilevanza --> rilevanza*100/$maxPoint
if($st == "1")
{
$query.="0)*100/$maxPoint,2) as rilevanza, id FROM tab1";
$query.=" WHERE $sqlwhere order by rilevanza DESC";
}
else if($st == "2")
{
$query.="0)*100/$maxPoint,2) as rilevanza, tab1.id FROM tab1";
$query2.="0)*100/$maxPoint,2) as rilevanza, tab2.id FROM tab2";
$query.=" WHERE $sqlwhere";
$query2.=" WHERE $sqlwhere2";
$query.=" UNION $query2 order by rilevanza DESC";
}
return $query;
}
}
Grazie mille