[PHP] Query per ricercare stringa in più colonne

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Un buongiorno a tutti,
ho una tabella con diversi campi all'interno, avrei la necessità di scrivere una query php che mi dia la possibilità di ricercare la presenza di una determinata stringa passata via post in una o più colonne della tabella

Avevo provato a scrivere la query in questo modo:

PHP:
$query = "SELECT * FROM Commesse WHERE targa LIKE '$targa' AND itr1 LIKE '%$intervento%' OR itr2 LIKE '%$intervento%' OR itr3 LIKE '%$intervento%' OR itr4 LIKE '%$intervento%'";

questa la form da cui recupero i campi tramite post:

HTML:
<fieldset>
<legend>Ricerca Commessa</legend>
<table id="add">
<tr>
<td><b>Targa</b></td>
<td><input type="text" name="targa" required = "required"></td>
</tr>
<tr>
<td><b>Intervento</b></td>
<td><input type="text" name="intervento"></td>
</tr>
</table>
</fieldset>

In sostanza tramite un form passo parte della targa oppure la targa intera e chiedo alla query di controllare nella tabella se per quella targa esistono una o più commesse che nei campi interventi itr* contiene la stringa oli

La query cosi come scritta estrae tutti i record del db e non tiene in considerazione ne la targa ne tantomeno gli interventi :(
 
Ultima modifica:
ciao
metti % anche a targa


Ciao borgo italia,
buongiorno e grazie per la risposta

allora ho effettuato la correzione proposta, da stupido che sono ho messo una clausola LIKE ma non le %, vabbe ...

questo il var_dump della query che viene eseguita: (mi vengono restituiti tutti i record della tabella)

PHP:
string(160) "SELECT * FROM CommesseOfficina WHERE targa LIKE '%FF123%' AND itr1 LIKE '%oli%' OR itr2 LIKE '%oli%' OR itr3 LIKE '%oli%' OR itr4 LIKE '%oli%' ORDER BY data ASC"

la tabella è cosi strutturata :

cliente|targa|itr1|itr2|itr3|itr4|itr5|ecc ecc
 
Riporto di seguito la struttura della tabella,
nella speranza di riuscire a strutturare la giusta query:

Codice:
CREATE TABLE IF NOT EXISTS `Commesse` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `veicolo` varchar(30) DEFAULT NULL,
  `targa` varchar(10) DEFAULT NULL,
  `km` varchar(50) DEFAULT NULL,
  `telaio` varchar(30) DEFAULT NULL,
  `cliente` varchar(50) DEFAULT NULL,
  `indirizzo` varchar(50) DEFAULT NULL,
  `piva` varchar(12) DEFAULT NULL,
  `tel` varchar(30) DEFAULT NULL,
  `itr1` varchar(70) DEFAULT NULL,
  `itr2` varchar(70) DEFAULT NULL,
  `itr3` varchar(70) DEFAULT NULL,
  `itr4` varchar(70) DEFAULT NULL,
  `itr5` varchar(70) DEFAULT NULL,
  `itr6` varchar(70) DEFAULT NULL,
  `itr7` varchar(70) DEFAULT NULL,
  `itr8` varchar(70) DEFAULT NULL,
  `itr9` varchar(70) DEFAULT NULL,
  `itr10` varchar(70) DEFAULT NULL,
  `itr11` varchar(70) DEFAULT NULL,
  `itr12` varchar(70) DEFAULT NULL,
  `itr13` varchar(70) DEFAULT NULL,
  `itr14` varchar(70) DEFAULT NULL,
  `itr15` varchar(70) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
la tua query manca di una coppia di parentesi tonde,
PHP:
SELECT * FROM Commesse
WHERE targa LIKE '%FF123%'
AND (itr1 LIKE '%oli%' OR itr2 LIKE '%oli%' OR itr3 LIKE '%oli%' OR itr4 LIKE '%oli%')
ORDER BY data ASC
ma rispetto al tuo ultimo post, il nome della tabella non coincide e la colonna "data" non esiste
 
Grazie al vostro prezioso supporto sono riusciuto a scrivere la query e risolvere il problema, riporto la query utilizzata nella speranza che possa tornare utile a qualche altro collega.

Codice:
$query = "SELECT * FROM Commesse WHERE `targa` LIKE '%$targa%' AND (`itr1` LIKE '%$intervento%' OR `itr2` LIKE '%$intervento%' OR `itr3` LIKE '%$intervento%' OR `itr4` LIKE '%$intervento%' OR `itr5` LIKE '%$intervento%' OR `itr6` LIKE '%$intervento%' OR `itr7` LIKE '%$intervento%' OR `itr8` LIKE '%$intervento%' OR `itr9` LIKE '%$intervento%' OR `itr10` LIKE '%$intervento%')";
 

Discussioni simili