Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    313

    reggruppare risultati per singola estrazione

    Salve a tutti, mi sto addentrando sempre di più alle query Mysql praticamente bellissime oltre al fatto che semplificano il lavoro se scritte bene, detto ciò vi espongo la mia problematica:

    ho due tabelle

    1)point_anagrafica

    id
    id_account
    id_point
    id_marker
    ragione_sociale
    ragione_sociale_1
    nome
    cognome
    telefono
    provincia
    citta
    via
    n_civico
    funzionario
    livello
    abilita

    2)magazzino_promo_point

    id
    id_pormo
    id_account
    id_prodotto
    data_acq
    data_ins
    ora
    iccd_v
    imei
    stato



    ora cosa succede quando eseguo la seguente query
    codice:
     public function preleva_point($id_promo=null){
            $sql = "SELECT point_anagrafica.funzionario,point_anagrafica.id_account, magazzino_promo_point.id_promo, point_anagrafica.ragione_sociale, COUNT(*) AS da_inserire "
                . "FROM magazzino_promo_point "
                . "INNER JOIN point_anagrafica ON point_anagrafica.id_account = magazzino_promo_point.id_account "
                . "WHERE ((id_promo = '$id_promo') && ( magazzino_promo_point.data_ins IS NULL )) "
                . "GROUP BY point_anagrafica.ragione_sociale "
                . "ORDER BY point_anagrafica.funzionario ASC";
            return $this->db->query($sql)->result_object();
        }
    mi estrai il numero di promozioni da_inserire che a me interessa, ora come posso fare per aggiungere una seconda voce inserite ?

    vorrei estrarre tutto usando una sola query, in effetti se eseguo questa seconda query aggiungendo NOT mi estrae l'esatto opposto



    codice:
     public function preleva_point($id_promo=null){
             $sql = "SELECT  point_anagrafica.funzionario,point_anagrafica.id_account,  magazzino_promo_point.id_promo, point_anagrafica.ragione_sociale,  COUNT(*) AS da_inserire "
                . "FROM magazzino_promo_point "
                . "INNER JOIN point_anagrafica ON point_anagrafica.id_account = magazzino_promo_point.id_account "
                . "WHERE ((id_promo = '$id_promo') && ( magazzino_promo_point.data_ins IS NOT NULL )) "
                . "GROUP BY point_anagrafica.ragione_sociale "
                . "ORDER BY point_anagrafica.funzionario ASC";
            return $this->db->query($sql)->result_object();
        }

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    Per la prima volta in questo forum vedo del codice che mi piace! Sempre sia lodato (il codice).

    Ti segnalo un primo problema. Se usi GROUP BY, nella SELECT dovresti usare *solo* campi menzionati nella GROUP BY, oppure passati a una funzione, tipo MAX(nome_campo). Il motivo è semplice: tu vai a estrarre una riga *calcolata* (con massimi, minimi, medie...) e non fisicamente esistente in tabella. Quindi nominare campi della tabella non ha senso.

    MySQL ha sempre permesso di fare questo, ma la documentazione diceva di non farlo. Ora è ancora permesso, ma MySQL 5.6 a volte dà risultati sbagliati.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    313
    Confermo, in effetti il mio è un campo calcolato, ma non potrei fare diversamente perchè ho n record per singola ragione sociale....

    Però da quello che ho capito mi consigli di generarmi delle funzioni che mi facciano il calcolo e non usare una singola query ???

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2014
    residenza
    Genova, presenza costante a Milano
    Messaggi
    100
    No, basta che fai una join:

    SELECT riga fisica FROM point_anagrafica pa
    INNER JOIN .... query con group by
    ON point_anagrafica.id = ...

    Una query come quella di prima potrebbe essere proibita per default in MySQL 5.7:
    http://www.tocker.ca/2014/01/14/maki...e-default.html

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.