select campo tabella

marco_rx

Utente Attivo
19 Dic 2010
129
0
0
Salve io ho alcune tabelle strutturate in questo modo:

+------+----------+-------+-------+
| art_id | art_titolo | aut_id | cat_id | => art
+------+----------+-------+-------+
+-------+----------+
| aut_id | aut_nome | => aut
+-------+----------+
+-------+----------+
| cat_id | cat_nome | => cat
+-------+----------+

aut_id e cat_id della prima tabella fanno riferimento ad aut_id e cat_id delle altre due. Io avrei bisogno di recuperare tutti i record delle tabelle con un cat_id specifico. Per fare ciò mi basterebbe una clausola come: WHERE art.cat_id = 2; Però cat_id può contenere più valori separati da una virgola (ad esempio 1, 2) quindi la clausola precedente mi estrarrebbe solo i record con valori singoli. Quello che volevo sapere è: come posso recuperare sia i campi singoli che quelli multipli?
Ho provato anche con query del tipo
Codice:
SELECT *
FROM art, aut, cat
WHERE art.aut_id = aut.aut_id
AND art.cat_id = cat.cat_id
AND port_articoli.cat_id = 2
OR art.cat_id LIKE "%2, %"
OR art.cat_id LIKE "%, 2, %"
OR art.cat_id LIKE "%, 2%"
ma non non ho risolto niente
Qualche idea? (sperando che si capisca quello che ho scritto)
 
Ultima modifica:
innanzitutto per chiarezza di lettura (e perche' non ricordo mai le priorita' tra gli operatori logici...) io metterei una parentesi tonda in questo modo
Codice:
SELECT *
FROM art, aut, cat
WHERE art.aut_id = aut.aut_id
AND art.cat_id = cat.cat_id
AND (port_articoli.cat_id = 2 
OR art.cat_id LIKE "%2, %"
OR art.cat_id LIKE "%, 2, %"
OR art.cat_id LIKE "%, 2%")
se questa e' la giusta sequenza logica, perche' non capisco da dove viene port_articoli
comunque considera che la tua query estrae anche un numero che inizia o finisce con 2 (esempio 12 o 21)...
 
ciao
prova a scriverla in questo modo, salvo il mio '?'

SELECT *
FROM art AS ar, aut AS au, cat AS ca
WHERE ar.aut_id = au.aut_id
AND ar.cat_id = ca.cat_id
AND ???

anch'io non capisco quale sia la tabella port_articoli ? è un errore di scrittura? oppure è un'altra tabella?
(le tabelle l'hai fatte tu?)
se è un'altra tabella devi metterla nella select
FROM art AS ar, aut AS au, cat AS ca, porta_articoli AS pa
per cui nella where
pa.cat_id=2

poi per le parentesi devi vedere come vuoi dare la precedenza
 
Si scusate port_articoli sarebbe "art", quindi la query sarebbe questa:
Codice:
SELECT *
FROM art, aut, cat
WHERE art.aut_id = aut.aut_id
AND art.cat_id = cat.cat_id
AND port_articoli.cat_id = 2
OR art.cat_id LIKE "%2, %"
OR art.cat_id LIKE "%, 2, %"
OR art.cat_id LIKE "%, 2%"

comunque considera che la tua query estrae anche un numero che inizia o finisce con 2 (esempio 12 o 21)...
Infatti il mio problema era proprio questo, se devo recuperare una categoria con id 2 non dovrebbe uscirmi pure 12, 20 ecc... Ho aggiunto le virgole nella ricerca proprio perchè volevo evitare questo. Comunque adesso provo con le parentesi e vi faccio sapere
 
Ho provato usando le parentesi e funziona perfettamente. Grazie mille :D
ciao
se il tuo problema e che cerca 12 22 20... e tu vuoi solo 2, domanda: a che ti servono allora gli or coi like?
Si io voglio selezionare solo gli articoli che sono nella categoria con id 2, ma se non usassi i like gli articoli con più categorie (es. 1, 2, 3) non verrebbero selezionati pur appartenendo alla categoria 2.
 

Discussioni simili