Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    elementi maggiormente ripetuti

    Ho una tabella clienti

    id
    cognome
    nome
    localita_id

    e una tabella localita

    id
    localita

    Vorrei creare una query che mi elenchi in ordine decrescente le localita dal maggiore al minor numero di clienti. Es.:

    Roma 15
    San Patrignano 12
    Viareggio 12
    Matera 10
    etc.etc.

    Immagino che sia possibile, ma con quali istruzioni?
    Prima o poi anch'io vi insegnerò qualcosa

  2. #2
    Se utilizzi MySQL, ti suggerisco di iniziare leggendo il manuale ufficiale:

    http://dev.mysql.com/doc/refman/5.0/...function_count

    Se utilizzi un altro database, fai riferimento al suo manuale ufficiale.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Non l'ho testata ma dovrebbe andar bene.
    codice:
    select l.localita,count(c.localita_id) as quanti
    from clienti c
    inner join localita l on c.localita_id = l.id 
    group by c.localita_id
    order by quanti desc

  4. #4
    Non c'ho capito molto e quindi sono andato per tentativi.

    Ho provato così:

    $query = "SELECT l.localita,count(c.localita_id) as quanti
    from fusion_clienti c
    inner join fusion_localita l on c.localita_id = l.id
    group by c.localita_id
    order by quanti desc";
    $result = dbquery($query);
    if (dbrows($result) != 0) {
    while($data = dbarray($result)) {
    echo $data['l.localita'].'
    ';
    }
    }

    A giudicare dal risultato (5
    in fila) la query è corretta ma non sò (non credo), se è ok il modo in cui cerco di visualizzarlo.

    in realtà le tabelle sono 4

    CREATE TABLE `fusion_clienti` (
    `id` int(5) unsigned NOT NULL auto_increment,
    `cognome` varchar(50) default NULL,
    `nome` varchar(50) default NULL,
    `ragione_sociale` varchar(50) default NULL,
    `via` varchar(50) default NULL,
    `numero_civico` varchar(50) default NULL,
    `localita_id` int(5) unsigned NOT NULL default '0',
    `data_inserimento` varchar(100) default NULL,
    `data_ultima_modifica` varchar(100) default NULL,
    PRIMARY KEY (`id`)
    );

    CREATE TABLE `fusion_localita` (
    `id` int(5) unsigned NOT NULL auto_increment,
    `localita` varchar(100) default NULL,
    `comune_id` int(5) unsigned default NULL,
    `cap` int(5) unsigned default NULL,
    PRIMARY KEY (`id`)
    );

    CREATE TABLE `fusion_comuni` (
    `id` int(5) unsigned NOT NULL auto_increment,
    `comune` varchar(100) default NULL,
    `provincia_id` int(5) unsigned default NULL,
    PRIMARY KEY (`id`)
    );

    CREATE TABLE `fusion_province` (
    `id` int(5) unsigned NOT NULL auto_increment,
    `provincia` varchar(100) default NULL,
    `provincia_abb` varchar(100) default NULL,
    PRIMARY KEY (`id`)
    );

    In ogni caso proverò a modificarla io se mi aiuti a visualizzare almeno i dati con le due tabelle
    Prima o poi anch'io vi insegnerò qualcosa

  5. #5
    Ho risolto così

    $query = "SELECT l.localita AS X,count(c.localita_id) as quanti
    from fusion_clienti c
    inner join fusion_localita l on c.localita_id = l.id
    group by c.localita_id
    order by quanti desc";
    $result = dbquery($query);
    if (dbrows($result) != 0) {
    while($data = dbarray($result)) {
    echo $data['X'].' - '.$data['quanti'].'
    ';
    }
    }

    adesso provo a mettere anche le altre due tabelle.
    Prima o poi anch'io vi insegnerò qualcosa

  6. #6
    Scusate la pochezza del metodo usato ma non ne conosco alcuno, se non quello con cui qui sotto ho risolto.

    $query = "SELECT l.id AS X, count(c.localita_id) as quanti
    from fusion_clienti c
    inner join fusion_localita l on (c.localita_id = l.id)
    group by c.localita_id
    order by quanti desc";
    $result = dbquery($query);
    if (dbrows($result) != 0) {
    while($data = dbarray($result)) {


    $query2 = 'SELECT ';
    $n_tabelle2 = 0; unset($t2);
    $n_tabelle2 = $n_tabelle2 + 1; $t2[] = 'fusion_province';
    $n_tabelle2 = $n_tabelle2 + 1; $t2[] = 'fusion_comuni';
    $n_tabelle2 = $n_tabelle2 + 1; $t2[] = 'fusion_localita';
    ELENCO_CAMPI($n_tabelle2, $t2, $query2, $db_name, $db);
    ELENCO_TABELLE($n_tabelle2, $t2, $query2, $db_name, $db);
    $query2 = $query2 . ' WHERE
    (fusion_province.id = fusion_comuni.provincia_id) and
    (fusion_comuni.id = fusion_localita.comune_id) and
    (fusion_localita.id = '.$data['X'].')';
    $result2 = dbquery($query2);
    if (dbrows($result2) != 0) {
    if ($data2 = dbarray($result2)) {
    echo $data2['FUSION_PROVINCE_PROVINCIA'].' - '.$data2['FUSION_COMUNI_COMUNE'].' - '.$data2['FUSION_LOCALITA_LOCALITA'].' - '.$data['quanti'].'
    ';
    }
    }


    }
    }

    Se qualcuno, al fine di insegnare un metodo più corretto (che non quello di utilizzare una query in un'altra query), vuole perderci due minuti ...
    Prima o poi anch'io vi insegnerò qualcosa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.