• User Newbie

    select mysql - Visualizzare clienti che non ordinano da una certa data

    Dovrei creare una query in mysql che mi visualizza i clienti che NON ordinano da una certa data (data che scelgo io grazie un ad un form in php)

    le tabelle cosi composte:

    tabella clienti:
    id_cliente
    cognome
    nome
    indirizzo

    tabella ordini
    cod_cliente
    data_ordine

    Grazie per l'aiuto !


  • User

    Ciao

    Direi che la questione è meno complicata di quel che sembra 😉

    Bisogna eseguire una query sulla tabella dei clienti ed incrociare i risultati con una join nella tabella degli ordini, includendo come ulteriore clausola di ricerca la condizione riguardo la data.

    Se non riesci ancora, prova a copiare qui la query che hai prodotto 🙂


  • User Newbie

    questa è la select che ho fatto, ma ovviamente mi restituisce i clienti che dopo la data prestabilita hanno fatto ordini, mentre a me interessa il contrario... E NON SO PROPRIO DA DOVE INIZIARE !!!

    SELECT DISTINCT id_cliente, cognome, nome, cod_cliente, data_ordine
    FROM clienti
    INNER JOIN ordini ON id_cliente = cod_cliente
    WHERE data_ordine > '$data_fine'
    GROUP BY id_cliente
    ORDER BY cognome


  • User

    @jb said:

    questa è la select che ho fatto, ma ovviamente mi restituisce i clienti che dopo la data prestabilita hanno fatto ordini, mentre a me interessa il contrario... E NON SO PROPRIO DA DOVE INIZIARE !!!

    SELECT DISTINCT id_cliente, cognome, nome, cod_cliente, data_ordine
    FROM clienti
    INNER JOIN ordini ON id_cliente = cod_cliente
    WHERE data_ordine > '$data_fine'
    GROUP BY id_cliente
    ORDER BY cognome

    In realtà hai già la soluzione per le mani 😄

    L'errore nella query che hai prodotto sta nel fatto che richiedi i record dove data_ordine è maggiore alla $data_fine, per cui richiedi i record con la data piu' recente rispetto a quella di riferimento. E se ogni riga nella tabella ordini corrisponde ad un ordine, come logico dedurre che sia, allora è normale che funzioni esattamente al contrario.

    La condizione logica dovrebbe essere che la data di ordine è inferiore, quindi piu' vecchia, della data di riferimento e ti basta solo modificare l'operatore di confronto in questa espressione

    ..
    WHERE data_ordine > '$data_fine'
    ..
    

    così:

    ..
    WHERE data_ordine < '$data_fine'
    ..
    

    per ottenere ciò che ti serve 🙂


  • User Newbie

    No, Blanks, purtroppo questa soluzione l'ho gia provata e mi visualizza i clienti che hanno effettuato ordini prima della data , ma a me servono la lista dei clienti che NON hanno effettuato NESSUN ordine dopo quella data !! (QUINDI NELLA TABELLA ORDINI DOPO QUELLA DATA DI RIFERIMENTO COMPAIONO PER ESEMPIO 10 ORDINI COLLEGATI A 10 ID CLIENTI, IO VOGLIO VISUALLIZARE NON I 10 ID CLIENTI MA TUTTI GLI ALTRI CLIENTI CHE NON ESISTONO NELLA TABELLA ORDINI DOPO LA BENEDETTA DATA)
    Spero di essere stato chiaro nell esempio e ti ringrazio anticipatamente.


  • User Newbie

    le sto provando di tutte ma sono ancora in alto mare...
    AIUTATEMI , grazie


  • User Attivo

    Sarebbe molto semplice se, nella tabella clienti, ci fosse un ulteriore campo in cui si memorizza la data (in formato timestamp) dell'ultimo ordine effettuato dal cliente.


  • User Attivo

    La butto lì, anche se non ho analizzato benissimo il problema.

    In teoria dovresti fare due cicli.

    In uno ti vai a selezionare tutti gli ordini (Id_utente) di quella data, ed inserisci gli Id_utente in un array.

    In un altro ti cicli tutti gli utenti, e metti gli id in un altro array.

    Alla fine fai una differenza tra gli array, e ti verrà fuori un'altro array con gli Id_utente non presenti in quel giorno 😉

    Spero di essere stato chiaro. In caso contrario ti faccio un esempio concreto!


  • User

    che tipo di data estrae da data_ordine e che valore viene memorizzato nella variabile data_fine?

    stampa la query a video e postala.