Discussione:
[PRINCIPIANTE] Fare un count su due tabelle...
(troppo vecchio per rispondere)
Giacomo
2004-12-12 22:42:54 UTC
Permalink
salve a tutti, mi sto avvicinando ora al mondo dei database e mi trovo
davanti al primo problema...
dopo aver smanettato un po' con semplici INSERT, SELECT e UPDATE varì senza
problemi, mi trovo a tentare di ricevere dati da due tabelle
contemporaneamente e arrivano i problemi...

il problema è contare gli elementi in due tabelle distinte che rispondono a
due chiavi distinte...tutto qui ma nn vado avanti...

ecco dove sono arrivato:

SELECT COUNT(tabella1.campo1), COUNT(tabella2.campo2) FROM tabella1,
tabella2 WHERE campo1 LIKE '%chiave1%' OR campo2 LIKE '%chiave2%'

dove sbaglio?

grazie per l'attenzione!

ps: se avete a portata di mano un buon link per approfondire l'argomento lo
prendo volentieri. grazie!
Giacomo
2004-12-12 23:55:21 UTC
Permalink
sono ore che leggo a destra e a manca e sto cominciando a chiedermi se sia
realmente possibile (ma sopratutto utile???)...
Darkbyte [Home]
2004-12-13 07:34:53 UTC
Permalink
Hai provato con UNION?
Union ti "aggiunge" al risultato di una query il risultato di un'altra
query:

SELECT COUNT(Campo1)
FROM Tabella1
WHERE Campo1 LIKE '%chiave1%'

UNION

SELECT COUNT(Campo2)
FROM Tabella2
WHERE Campo2 LIKE '%chiave2%'
--
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
___ _ ___ _ _______ _______ ___
| \ /_\ | _ \ |/ / _ ) \ / /_ _| __|
| |) / _ \| / ' <| _ \\ V / | | | _|
|___/_/ \_\_|_\_|\_\___/ |_| |_| |___|
Giacomo
2004-12-13 09:27:35 UTC
Permalink
ok funziona,
però restituisce il risultato su due righe, mi chiedevo se si potesse
ottenere come risultato una sola riga con due voci...

ah dimenticavo, ho fatto un errore nel mio post, se può influire, la chiave
che cerco è uguale per entrambe le tabelle.
Post by Darkbyte [Home]
Hai provato con UNION?
Union ti "aggiunge" al risultato di una query il risultato di un'altra
SELECT COUNT(Campo1)
FROM Tabella1
WHERE Campo1 LIKE '%chiave1%'
UNION
SELECT COUNT(Campo2)
FROM Tabella2
WHERE Campo2 LIKE '%chiave2%'
--
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
___ _ ___ _ _______ _______ ___
| \ /_\ | _ \ |/ / _ ) \ / /_ _| __|
| |) / _ \| / ' <| _ \\ V / | | | _|
|___/_/ \_\_|_\_|\_\___/ |_| |_| |___|
Darkbyte [Work]
2004-12-13 10:43:07 UTC
Permalink
Post by Giacomo
ok funziona,
però restituisce il risultato su due righe, mi chiedevo se si potesse
ottenere come risultato una sola riga con due voci...
Puoi fare così:

SELECT SUM(IF(ID=1, C, 0)) AS C1,
SUM(IF(ID=2, C, 0)) AS C2
FROM
(
SELECT 1 AS ID, COUNT(1) AS C
FROM Tabella1
WHERE Campo1 LIKE '%chiave%'

UNION

SELECT 2, COUNT(1)
FROM Tabella2
WHERE Campo2 LIKE '%chiave%'
) AS SubRS;
--
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
___ _ ___ _ _______ _______ ___
| \ /_\ | _ \ |/ / _ ) \ / /_ _| __|
| |) / _ \| / ' <| _ \\ V / | | | _|
|___/_/ \_\_|_\_|\_\___/ |_| |_| |___|
Giacomo
2004-12-13 11:06:28 UTC
Permalink
Post by Darkbyte [Work]
SELECT SUM(IF(ID=1, C, 0)) AS C1,
SUM(IF(ID=2, C, 0)) AS C2
FROM
(
SELECT 1 AS ID, COUNT(1) AS C
FROM Tabella1
WHERE Campo1 LIKE '%chiave%'
UNION
SELECT 2, COUNT(1)
FROM Tabella2
WHERE Campo2 LIKE '%chiave%'
) AS SubRS;
ora me la studio...può darmi una dritta sull'operatore if? è tipo un
operatore ternario?
Darkbyte [Work]
2004-12-13 11:09:40 UTC
Permalink
L'operatore IF funziona così:

IF(Condizione, CasoSI, CasoNO)

e analizza la condizione, restituendoti il valore CasoSI nel caso la
condizione sia vera, oppure il valore CasoNO nel caso la condizione non
sia vera.

SELECT IF(10=10, 'SI', 'NO') ti restituisce 'SI'
SELECT IF(10=37, 'SI', 'NO') ti restituisce 'NO'

Comunque trovi questa e altre funzioni al sito www.mysql.com
--
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
___ _ ___ _ _______ _______ ___
| \ /_\ | _ \ |/ / _ ) \ / /_ _| __|
| |) / _ \| / ' <| _ \\ V / | | | _|
|___/_/ \_\_|_\_|\_\___/ |_| |_| |___|
Giacomo
2004-12-13 11:50:27 UTC
Permalink
Post by Darkbyte [Work]
IF(Condizione, CasoSI, CasoNO)
un ternario, appunto.


ok, perfetto, grazie per l'aiuto!
Post by Darkbyte [Work]
Comunque trovi questa e altre funzioni al sito www.mysql.com
niente in ita? di solito preferisco far riferimento ai reference inglesi
(solitamente più completi) ma quando sei agli inizi (e intendo inizi,
inizi!) ci mancano solo le carenze d'inglese a complicarti la vita...!
Giacomo
2004-12-13 15:37:23 UTC
Permalink
Post by Darkbyte [Home]
Hai provato con UNION?
mi permetto di fare un piccolo appunto alla soluzoine di darkbyte...

nel mio caso usando union è stato necessario aggiungere ALL se no, in caso
di risultati uguali, ne veniva restituito solo uno...

ho usato quindi:

SELECT COUNT(Campo1)
FROM Tabella1
WHERE Campo1 LIKE '%chiave1%'

UNION ALL

SELECT COUNT(Campo2)
FROM Tabella2
WHERE Campo2 LIKE '%chiave2%'
Darkbyte [Work]
2004-12-13 17:50:47 UTC
Permalink
Post by Giacomo
Post by Darkbyte [Home]
Hai provato con UNION?
mi permetto di fare un piccolo appunto alla soluzoine di darkbyte...
nel mio caso usando union è stato necessario aggiungere ALL se no, in caso
di risultati uguali, ne veniva restituito solo uno...
Questo non lo sapevo... o_o
Effettivamente non afferravo la differenza fra UNION ed UNION ALL (ma
non sono nemmeno andato a documentarmi, quindi...).
Una cosa in più nel proprio repertorio :)
--
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).
___ _ ___ _ _______ _______ ___
| \ /_\ | _ \ |/ / _ ) \ / /_ _| __|
| |) / _ \| / ' <| _ \\ V / | | | _|
|___/_/ \_\_|_\_|\_\___/ |_| |_| |___|
Nerone
2004-12-13 07:48:39 UTC
Permalink
Giacomo wrote:
[cut]
Post by Giacomo
il problema è contare gli elementi in due tabelle distinte che rispondono a
due chiavi distinte...tutto qui ma nn vado avanti...
SELECT COUNT(tabella1.campo1), COUNT(tabella2.campo2) FROM tabella1,
tabella2 WHERE campo1 LIKE '%chiave1%' OR campo2 LIKE '%chiave2%'
dove sbaglio?
La SELECT che hai scritto tu crea un FULL JOIN
cioe` il prodotto cartesiano delle tabelle.
Cose` il prodotto cartesiano? tie`: ogni riga(tupla)
di in tabella viene incrociata con tutte le righe
dell'altra tabella ottenendo come risultato un
insieme che contiene N x M righe.

Quindi: una SELECT un insieme e un solo COUNT()

SELECT COUNT(tabella1.campo1) FROM tabella1
WHERE campo1 LIKE '%chiave1%'

SELECT COUNT(tabella2.campo2) FROM tabella2
WHERE campo2 LIKE '%chiave2%'
Post by Giacomo
grazie per l'attenzione!
ps: se avete a portata di mano un buon link per approfondire l'argomento lo
prendo volentieri. grazie!
Continua a leggere su narkive:
Loading...