Quello che intendevo dire io è che senza usare un campo per ogni categoria puoi usare un unico campo "iscrizione" di tipo TEXT con all'interno storato l'array contenente tutte le categorie a cui l'utente è iscritto:
Codice PHP:
$sql = "SELECT * FROM ml_category ORDER BY nome ASC";
$result = mysql_query($sql);
while($row = mysql_fetch_array($row))
{
print("<td><INPUT type='checkbox' name='cat[]' value='".$row['name']."'>".$row['name']."</td>");
}
nel file con lo script di inserimento riceverai l'array $_POST['cat'] che conterrà i nomi delle categorie a cui è iscritto l'utente (anche se troverei più comodo inserire gli ID):
Codice PHP:
$email = "pippo@mail.com";
// recupero l'array dei valori
$array_cat = $_POST['cat'];
// lo traduco in un formato storabile nel DB
$categorie = serialize($array_cat);
mysql_query("INSERT INTO ml_user_category (email, iscrizioni) VALUES ('$email', '$categorie')");
Ogni volta che ti serve sapere a che categorie è iscritto l'utente basta che recuperi l'array, lo decodifichi e ne leggi i valori:
Codice PHP:
$sql = "SELECT * FROM ml_user_category WHERE email = 'pippo@mail.com' LIMIT 1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$array_cat = unserialize($row['iscrizioni']);
Poi...per carità...il mio è un consiglio, ma per esperienza personale con delle newsletter in passato ti posso dire che questo metodo si rivela più "malleabile" di altri.
Spero di esserti stato utile ^^