• User

    Contare record di più tabelle

    Ciao a tutti,
    ho un problemino che pensavo fosse una sciocchezza ma che invece non riesco a risolvere... ho bisogno di contare il numero totale di righe/record di più tabelle, senza però dover fare 1000 query!!
    Sono 2 ore che sto ricercando una soluzione su forum e guide, anche stranieri, ho trovato tante possibili soluzioni ma non sono riuscito ad applicarne nemmeno una... :arrabbiato:

    Ad esempio ho trovato qst codice:

    [PHP]
    SELECT count(a.id) AS id_a
    FROM tab1 a
    UNION
    SELECT count(b.id) AS id_b
    FROM tab2 b
    UNION
    SELECT count(c.id) AS id_c
    FROM tab3 c
    [/PHP]

    ... ma a parte non aver capito molto la logica, non ho capito come sviluppare il passaggio successivo perché infatti nel modo seguente non funziona per errore di sintassi:

    [PHP]
    $get_num = @mysql_query("$sql_count",$link) or die("Errore query database: " . mysql_error());
    $riga = mysql_fetch_array($get_num);
    $totale_link = $riga['id_a','id_b','id_c'];
    [/PHP]


  • User Attivo

    Ciao, potresti fare in questo modo:
    SELECT count(a.id) AS tot
    FROM tab1 a
    UNION
    SELECT count(b.id)
    FROM tab2 b
    UNION
    SELECT count(c.id)
    FROM tab3 c

    Così ottieni tutti i totali delle varie tabelle, poi in php puoi scorrere i risultati facendo la loro somma.


  • User

    ok, però non ho capito come faccio la somma.... :bho:

    infatti se scrivo

    [PHP]

    $get_num = @mysql_query("$sql_count",$link) or die("Errore query database: " . mysql_error());
    $riga = mysql_fetch_array($get_num);
    $totale_link = $riga['tot'];

    [/PHP]

    mi dà il numero di record della prima tabella (e rispetto a prima è già un progresso... :1: ma come faccio a scorrerli e sommarli?


  • User Attivo

    Basta utilizzare un ciclo while:
    [PHP]$tot = 0;
    while($riga = mysql_fetch_array($get_num)){
    $tot += $riga['tot'];
    }[/PHP]


  • User

    ok adesso funziona!!!
    grazie mille!


  • User

    😢 ho cantato vittoria troppo presto.... avevo fatto una prova con 5 delle 14 tabelle di cui devo sommare i record e funzionava, ma quando ho aggiunto le altre 7, alcune di queste non me le prende!! Il bello è che quelle che non mi prende non sono sempre le stesse variano a seconda dell'ordine in cui le metto nel codice. C'è forse un numero limite di tabelle che si possono conteggiare o qualche altra restrizione? Il codice delle tabelle che non sono conteggiate è perfettamente uniforme a quello delle tabelle che mi conteggia... non capisco proprio dov'è l'errore... mi dovrebbe conteggiare 74 record e me ne prende solo 48 :arrabbiato: ...


  • User Attivo

    Ma le altre tabelle hanno tutte il campo id?


  • User

    si hanno tutte un campo id e hanno proprio tutte la stessa struttura... faccio qualche altra prova adesso...


  • User

    non ho idea di quale fosse il problema prima, magari avevo sbagliato io nell'adattare il codice, comunque ho provato così adesso funziona!
    [PHP]$count = "SELECT countx+county+countz AS total FROM
    (SELECT COUNT( * ) AS countx FROM table1) AS x,
    (SELECT COUNT( * ) AS county FROM table2) AS y,
    (SELECT COUNT( * ) AS countz FROM table3) AS z";

    $get_tot = @mysql_query("$count",$link) or die("Errore query database: " . mysql_error());
    $riga = mysql_fetch_array($get_tot);
    $total = $riga['total'];
    echo $total;

    [/PHP]

    grazie del supporto e degli spunti! :ciauz:


  • User Attivo

    Di sicuro quest'ultimo metodo che hai utilizzato è più efficiente visto che viene restituito già il totale e quindi non bisogna eseguire un ciclo con il php.