- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- select mysql - Visualizzare clienti che non ordinano da una certa data
-
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
indirizzotabella ordini
cod_cliente
data_ordineGrazie per l'aiuto !
-
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
-
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
-
@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 cognomeIn 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
-
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.
-
le sto provando di tutte ma sono ancora in alto mare...
AIUTATEMI , grazie
-
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.
-
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!
-
che tipo di data estrae da data_ordine e che valore viene memorizzato nella variabile data_fine?
stampa la query a video e postala.