Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591

    [mysql] query ricerca clienti

    Scusate il titolo, ma non sapevo dove andare a parare...
    Avrei bisogno di fare una query, secondo me due, per cercare nella tabella "clienti" quelli che non chiamano da oltre 6 mesi.
    Io avrei proceduto facendo una query con group by per avere gli id di tutti quelli che hanno chiamato negli ultimi 6 mesi.
    Poi la seconda query mettendo la data da 6 mesi a 3 anni fa con NOT IN (TUTTI GLI ID DI QUELLI CHE HANNO CHIAMATO).
    Esiste una query più "veloce" e soprattutto modo di farlo con una sola query?

    Grazie in anticipo a chi mi darà una mano

  2. #2
    dove stanno le chiamate?

  3. #3
    Utente di HTML.it L'avatar di SkyLinx
    Registrato dal
    Jun 2017
    residenza
    Espoo, Finland
    Messaggi
    60
    Senza conoscere la struttura delle tabelle attuale e' impossibile suggerirti una query.
    The only way to stay sane is to go a little crazy. - Susanna Kaysen

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    scusate, sono andato abstract mode perchè non credevo ce ne fosse bisogno.. diciamo che ho una struttura semplce e "classica"
    ho una tabella "telefonate" che contiene parecchi campi e uno di questi è l'id del cliente che ha chiamato. ci sono vari campi data, e uno è un semplice campo con il giorno nella forma 2018-05-30 che però è un varchar(10).. uso questa per semplicità...
    poi c'è una tabella "clienti" che contiene l'anagrafica.. ovviamente le collego con join
    io farei apputo una query tipo
    SELECT tel_id_cliente from telefonate WHERE tel_giorno > '2018-05-26' GROUP BY tel_id_cliente order BY tel_giorno ASC
    prendo gli id dei clienti in php e li ciclo separandoli con la virgola
    a questo punto faccio la query
    SELECT * from telefonate WHERE tel_id_cliente NOT IN ($valori_presi_da_altra_query)

    in questo modo praticamente escludo tutti i clienti che hanno chiamato negli ultimi 6 mesi..
    sto andando bene? posso migliorare e ad esempio fare tutto con una sola query?

    grazie comunque ad entrambi

  5. #5
    select
    c.nome, max(t.data)
    from telefonate t inner join clienti c on t.idcliente=c.idcliente
    group by c.nome
    having max(data)<---6_mesi_fa

    qualcosa del genere

  6. #6
    Utente di HTML.it L'avatar di SkyLinx
    Registrato dal
    Jun 2017
    residenza
    Espoo, Finland
    Messaggi
    60
    codice:
    SELECT c.nome, MAX(str_to_date(t.data, '%Y-%m-%d')) AS ultima_telefonata
    FROM telefonate t
    JOIN clienti c ON c.id = t.id_cliente
    GROUP BY id_cliente
    HAVING ultima_telefonata < DATE_SUB(NOW(), INTERVAL 6 MONTH);
    The only way to stay sane is to go a little crazy. - Susanna Kaysen

  7. #7
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    Ragazzi scusate per il ritardo nella risposta..
    grazie ad entrambi.. la prossima settimana provo le query, ora non ho modo di farlo ma sono sicuro che vanno entrambe benissimo

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    Riprendo questa discussione per affinare la cosa:
    il cliente mi chiede di mettergli non 6 mesi come data, ma un range di date.. ho fatto questa che mi sembra ok
    mi sono preso una decina di id che hanno richiamato e id che non hanno richiamato ed è ottima

    SELECT c.nome, MAX(str_to_date(t.data, '%Y-%m-%d')) AS ultima_telefonata
    FROM telefonate t
    JOIN clienti c ON c.id = t.id_cliente
    GROUP BY id_cliente
    HAVING ultima_telefonata > '2018-06-01' AND HAVING ultima_telefonata < '2018-06-03'

    grazie ancora ad entrambi
    Ultima modifica di telegio; 01-12-2018 a 11:18

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.