Newsgroup: it.comp.www.php
Titolo: [MYSQL] Count su due tabelle

premetto che č la prima query un po' piů complicata che mi accingo a fare...
...e neanche sono sicuro che si possa/convenga farla
insomma spero nel vostro aiuto e consiglio!
il problema č contare gli elementi in due (o piů) tabelle distinte che 
rispondono a una chiave
posso ottenerlo con una sola query? mi conviene o č meglio farlo con due?
SELECT COUNT(tabella1.campo1), COUNT(tabella2.campo2) FROM tabella1, 
tabella2 WHERE campo1 LIKE '%chiave1%' OR campo2 LIKE '%chiave1%'
...avevo scritto una cosa del genere, ma mi mancano proprio le basi e sono 
andato pressochč a caso...una buona guida da consigliarmi (online, se 
possibile) che vada oltre la spiegazione delle operazioni semplici?
grazie per l'attenzione!
giacomo

 due?
it.comp.software.database, free.it.comp.database.mysql
-- 
I am what I am, I do what I can
Do. Or do not. There is not try.

"Giacomo" <carlo3000(at)libe...@CANCELLA.QUESTO> ha scritto nel messaggio
news:y%4vd.285971$b5.13...@news3.tin.it...

sei ot, cmq si fa
io ho fatto una funzione che uso sempre (giusto perke siam o su it.php):
function dbcount($campo,$tabella,$criterio="") {
    $sql = "select count($campo) as cont from $tabella ";
    if ($criterio=="") {
        $sql .= "";
    } else {
        $sql .= " where $criteria ";
    }
    $rs = mysql_query($sql);
    $row = mysql_fetch_array($rs);
    $fld = $row["cont"];
    return $fld;
}
$v1 = dbcount("campo","tabella1","valore=pippo and....or..");
$v2 = dbcount("campo","tabella2","valore=pippo and....or..");
if ($v1 != $v2) ...
o qualsiasi cosa ti serva.
ti puo' servire o non c'ho capito una mazza?
Ciao :)

 $v2 = dbcount("campo","tabella2","valore=pippo and....or..");
il mio problema era di voler fare una sola connessione al database...sempre 
detto che valga la pena farlo in termini di velocità...
su free.it.comp.database.mysql, il pazientissimo Darkbyte, mi ha suggerito 
queste due per chi è interessato:
-----------------------------------------------------------------
SELECT COUNT(Campo1)
FROM Tabella1
WHERE Campo1 LIKE '%chiave1%'
UNION
SELECT COUNT(Campo2)
FROM Tabella2
WHERE Campo2 LIKE '%chiave2%'
-----------------------------------------------------------------
con questa si ottengono 2 righe con i totali
oppure (per ottenere i risultati in una sola righa, divisi nelle colonne)
-----------------------------------------------------------------
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;
----------------------------------------------------------------- 

>... 

 -----------------------------------------------------------------
nel caso si usi la prima ipotesi (qui sopra) è necessario specificare UNION 
ALL se no in caso di risultati uguali ne verrà restituito uno solo!!
usare quindi:
SELECT COUNT(Campo1)
FROM Tabella1
WHERE Campo1 LIKE '%chiave1%'
UNION ALL
SELECT COUNT(Campo2)
FROM Tabella2
WHERE Campo2 LIKE '%chiave2%'
ciao!

 WHERE Campo2 LIKE '%chiave2%'
Occhio che la clausola UNION è stata implementata dalla versione 4.0.0 in
poi.
Nelle versioni precedenti non c'è. Quindi tocca fare 2 query di conteggio.
Ciao
Marco

"Giacomo" <carlo3000(at)libe...@CANCELLA.QUESTO> ha scritto nel messaggio
news:y%4vd.285971$b5.13...@news3.tin.it...

sei ot, cmq si fa
io ho fatto una funzione che uso sempre (giusto perke siam o su it.php):
function dbcount($campo,$tabella,$criterio="") {
    $sql = "select count($campo) as cont from $tabella ";
    if ($criterio=="") {
        $sql .= "";
    } else {
        $sql .= " where $criteria ";
    }
    $rs = mysql_query($sql);
    $row = mysql_fetch_array($rs);
    $fld = $row["cont"];
    return $fld;
}
$v1 = dbcount("campo","tabella1","valore=pippo and....or..");
$v2 = dbcount("campo","tabella2","valore=pippo and....or..");
if ($v1 != $v2) ...
