Newsgroup: it.comp.www.php
Titolo: Preferiti e scelta progettuale

Sto aggiungendo ad un sistema web multiutente basato su database un sistema
di gestione preferiti.
Lo stato delle cose (che non ho intenzione di toccare) e' il seguente
(tralascio dettagli superflui):
tabella utenti
+----------+
| username |
+----------+
tabella comandi
+----+--------+
| id | titolo |
+----+--------+
quello che voglio creare e' una tabella preferiti siffatta:
+------------+----------+
| id_comando | username |
+------------+----------+
in modo da estrarre i comandi preferiti con una query:
SELECT comandi.titolo FROM comandi, preferiti WHERE preferiti.username =
$username AND 
comandi.id
 = preferiti.id_comando
il problema e' come estraggo i comandi "non preferiti". Vorrei realizzare
la maschera di scelta dei preferiti usando due listbox:
Preferiti      Altri comandi
+--------------+--------------+
|A             | B            |
|C             | E            |
|D             | F            |
|              | G            |
+--------------+--------------+
in modo che l'utente possa spostare tramite dei comandi gli elementi da una
listbox all'altra.
C'e' qualcosa che non va nella mia impostazione? Errori concettuali? Ci
sono maniere 'classiche' di affrontare la questione? Qualunque commento e'
ben accetto!
-- 
artemis.alpeia

 realizzare la maschera di scelta dei preferiti usando due listbox:
Estrai tutti i comandi e li metti in un array, estrai i preferiti e li
metti in un array e poi utilizza 
http://www.php.net/array_diff
 .
Per una soluzione in SQL puro ti suggerisco it.comp.software.database.
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.

 Per una soluzione in SQL puro ti suggerisco it.comp.software.database.
ok, grazie
-- 
#!/usr/bin/artemis.alpeia

 listbox all'altra.
una alternativa alla soluzione php di Setec č:
metti i preferiri in una lista (p1,p2,...,pn) (gli id dei comandi 
'preferiti')e alla tua query
SELECT comandi.titolo
FROM comandi, preferiti
WHERE
(preferiti.username = $username) AND (
comandi.id
 = preferiti.id_comando)
aggiungi
  AND (
comandi.id
 NOT IN (p1,p2,...,pn))
secondo me forse le condizioni in where potresti metterle in questo 
ordine, sempre che gli utenti siano molti e i comandi preferiti siano un 
buon numero rispetto al totale dei comandi disponibili per cui potrebbe 
avere un senso
(
comandi.id
 NOT IN (p1,p2,...,pn)) AND (preferiti.username = $username) 
AND (
comandi.id
 = preferiti.id_comando)
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

 Ciao Gianfranzo
...:D
beh ma allora e' semplice!
mi riempio un array $pref_arr con gli id_comando estratti da:
"SELECT id_comando FROM preferiti WHERE preferiti.username = '$username'"
e poi faccio:
"SELECT * from comandi WHERE id NOT IN ('" . implode($pref_arr, ',') . "')"
e' una mezza via tra la soluzione tutta php di Setec e quella tutta in SQL
che mi avevano proposto in free.it.comp.database.mysql :
SELECT 
comandi.id
, comandi.title
FROM preferiti
RIGHT JOIN comandi
ON preferiti.id_comando = 
comandi.id
AND preferiti.username = '$username'
WHERE preferiti.username IS NULL
della quale pero' non ho ancora capito bene il meccanismo (avrei preferito
una WHERE clause) perche' non sono ferratissimo in SQL e le right join non
le conosco.
...materiale per la settimana :))
grazie a tutti.
-- 
$artemis[$alpeia]