Newsgroup: it.comp.software.database
Titolo: [mySql] Numero di righe tornate da una query con JOIN

Sono alle prese con un problema che non riesco a risovere.
Ho due tabelle (t1 e t2) che unisco tramite una INNER JOIN.
Le tabelle sono cosi descritte (semplificando, perché i campi sono molti
di più):
t1:
+--------------------------+-----------------------+
| Field                    | Type                  |
+--------------------------+-----------------------+
| id                       | int(6)                |
| c1                       | mediumint(9) unsigned |
| c2                       | smallint(6) unsigned  |
+--------------------------+-----------------------+
t2:
+--------------------------+-----------------------+
| Field                    | Type                  |
+--------------------------+-----------------------+
| id                       | int(6)                |
| c1                       | mediumint(9) unsigned |
| c2                       | smallint(6) unsigned  |
| matricola                | char(30)              |
+--------------------------+-----------------------+
La query che uso è questa:
SELECT * FROM t1 INNER JOIN t2 USING (c1,c2)
         WHERE t2.matricola like "%123%"
In questo modo vorrei ottenere una terza tabella contenente i dati della
prima e i dati della seconda di tutte quelle righe che contengono nella
matricola il valore 123456.
La cosa mi riesce e ottengo un set di 108 righe di cui riporto una
parte:
+----+-------+----+----+-------+----+------------+
| id | c1    | c2 | id | c1    | c2 | matricola  |
+----+-------+----+----+-------+----+------------+
|  1 | 11702 | 43 |  2 | 11702 | 43 | 1234534549 |
|  2 | 11702 | 43 |  2 | 11702 | 43 | 1234534543 |
|  3 | 11702 | 43 |  2 | 11702 | 43 | 1234534548 |
|  4 | 11702 | 43 |  2 | 11702 | 43 | 1234534550 |
|  5 | 11702 | 43 |  2 | 11702 | 43 | 1234534546 |
|  6 | 11702 | 43 |  2 | 11702 | 43 | 1234534544 |
|  7 | 11703 | 43 |  4 | 11703 | 43 | 1234534441 |
|  8 | 11703 | 43 |  4 | 11703 | 43 | 1234534511 |
|  9 | 11703 | 43 |  4 | 11703 | 43 | 1234532977 |
| 10 | 11703 | 43 |  4 | 11703 | 43 | 1234533528 |
| 11 | 11704 | 43 |  6 | 11704 | 43 | 1234532809 |
| 12 | 11704 | 43 |  6 | 11704 | 43 | 1234533704 |
| 13 | 11704 | 43 |  6 | 11704 | 43 | 1234532782 |
(spero di non aver commesso errori nella semplificazione perché le
tabelle sono ben più complesse)
Come notate molte di queste righe sono duplicate nei campi c1 e c2,
questo perché ci sono molte righe della tabella t1 che hanno collegata
una matricola che inizia con "123".
Io vorrei una query che mi dicesse quante coppie c1-c2 ci sono.
Nel caso qui sopra dovrebbe tornare 3 (11702-43, 11703-43, 11704-43).
Grazie in anticipo a chi mi vorrà aiutare.
-- 
Stefano

 Nel caso qui sopra dovrebbe tornare 3 (11702-43, 11703-43, 11704-43).
con la clausola "group by":
SELECT count(*), c1, c2
FROM ...
WHERE ...
group by c1,c2
ciao
Giacomo

 group by c1,c2
Grazie, č uno dei tentativi che ho fatto ma non va bene (anche se mi
serve per altro). Il risultato č:
+----------+-------+----+
| count(*) | c1    | c2 |
+----------+-------+----+
|  6       | 11702 | 43 |
|  4       | 11703 | 43 |
|  3       | 11704 | 43 |
+----------+-------+----+
A me servirebbe:
+----------+
| count(*) |
+----------+
|  3       |
+----------+
Forse con una query tipo SELECT count(*) FROM SELECT....? Ma come?
Purtroppo č una tecnica di mySql che non ho mai usato.
-- 
Stefano

 Purtroppo è una tecnica di mySql che non ho mai usato.
Scusa, non avevo capito bene cosa ti serviva!
prova con:
select count(distinct c1,c2) ...
ciao
Giacomo

 select count(distinct c1,c2) ...
No.
Rende qualcosa simile a:
+-----------------------+
| count(distinct c1,c2) |
+-----------------------+
|  1                    |
|  1                    |
|  1                    |
+-----------------------+
Comunque lascia perdere, ti ringrazio moltissimo per il tempo che mi hai
dedicato, ma ho deciso di lasciare le cose così come sono ed andare
avanti con il lavoro.
Per farti capire: questa query avrebbe fatto parte di una pagina di un
sito in cui viene visualizzato il contenuto del db in una tabella.
Di solito faccio così;
-una prima query tipo SELECT count(id).... per conoscere il numero di
righe risultanti;
-una seconda query tipo SELECT * FROM.... che mi rende i risultati veri
e propri.
Il risultato della prima query serve a visualizzare qualcosa simile a:
"Risultati: 1-30 di 44292", con dei pulsanti "<<" e ">>" vicini per
navigare tra le pagine.
Capirai che leggere le 44292 righe solo per sapere quante sono è uno
spreco di risorse quindi uso count() per lo scopo.
Nel caso specifico però le righe sono veramente poche quindi la
differenza è accettabile.
Per ora mi ritiro sconfitto ma conto di riprendere l'argomento appena
avrò un po' di tempo da dedicarci.
Ciao
-- 
Stefano