Spesso è necessario memorizzare i dati come array in un campo di una tabella MySQL. La ricerca però presenta alcuni problemi, che possono essere risolti con un semplice accorgimento.
Partiamo da un esempio: una tabella “Attività” che ha tra i suoi campi la “Categoria”. I valori per Categoria possono essere “Ristorante” “Pizzeria” e “Albergo”. Un’attività può avere i requisiti per una o più categorie.
Realizziamo nel form di inserimento dati una select multipla per associare più categorie:
$categoria = explode (’|', $row['categoria']); //$row['categoria'] è il campo della tabella dove è contenuto l’array
echo ” Categoria: \n”;
echo ” <select multiple=\”multiple\” name=’categoria[]‘>\n”;
$query=”SELECT * FROM t_categorie WHERE valid=’1′ ORDER BY nome_sez”;
$result = mysql_query($query, $db);
while ($cat = mysql_fetch_array($result)) {
if (in_array($cat ["id_sez"],$categoria))
echo “<option selected=\”selected\” value=\”$cat [id_sez]\”>$cat [nome_sez]</option>\n”;
else
echo “<option value=\”$cat [id_sez]\”>$cat [nome_sez]</option>\n”;
} //fine while
echo ” </select>\n”;
dove t_categorie contiene le categorie, ognuna con un suo ID numerico id_sez e un nome nome_sez. Andiamo a memorizzare gli ID nel database MySQL con la funzione implode():
$categoria = implode(’|‘, $_POST['categoria']); //riga 1
$categoria = “|$categoria|“; //riga 2
Importante è l’utilizzo del separatore | (pipe), la seconda riga serve per avere i separatori anche a inizio e fine stringa. Grazie alla riga 2 è possibile fare ricerche per categoria:
“SELECT * FROM t_aziende WHERE categoria LIKE ‘%|$_POST[section]|%’ “
Dove t_aziende è la tabella in cui abbiamo memorizzato i dati, e $_POST[section] è la stringa ricercata, passata tramite un classico form di ricerca.







