supponiamo siano i campi a,b,c
codice:
list($v1, $v2, $v3) = explode (" ", $search);
$construct .="a LIKE '%$v1%' AND b LIKE '%$v2% AND c LIKE '%$v3%'";
$construct .=" OR a LIKE '%$v1%' AND b LIKE '%$v3% AND c LIKE '%$v2%'";
$construct .=" OR a LIKE '%$v2%' AND b LIKE '%$v1% AND c LIKE '%$v3%'";
$construct .=" OR a LIKE '%$v2%' AND b LIKE '%$v3% AND c LIKE '%$v1%'";
$construct .=" OR a LIKE '%$v3%' AND b LIKE '%$v1% AND c LIKE '%$v2%'";
$construct .=" OR a LIKE '%$v3%' AND b LIKE '%$v2% AND c LIKE '%$v1%'";
All'aumentare dei campi aumentano le condizioni, per essere più precisi se i campi sono n, avrai n*n! condizioni (3 campi 3*6 = 18 condizioni, 4 campi 4*24 = 96 condizioni, 5 campi 5*120 = 600 condizioni).
Insomma non è un approccio molto conveniente.
Quindi ripeto l'ideale sarebbe utilizzare MATCH AGAINST
Supponendo che i campi siano a, b, c, d, e, f, g, h, i per prima cosa dovresti fare:
ALTER TABLE nomeTabella ADD FULLTEXT(a, b, c, d, e, f, g, h, i);
Così da poter utilizzare match against su questi campi, esempio:
codice:
$valori = "'+" . implode(" +", explode (" ", $search)) . "'";
$query = "SELECT *, MATCH(a,b,c,d,e,f,g,h,i) AGAINST($valori IN BOOLEAN MODE) AS attinenza FROM nomeTabella WHERE MATCH(a,b,c,d,e,f,g,h,i) AGAINST($valori IN BOOLEAN MODE) ORDER BY attinenza DESC";
Molto meglio no?
Considera anche che non ho mai utilizzato MATCH AGAINST e che forse è meglio chiedere nella sezione del forum riservata ai database.