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

    [mysql] query ritardatari pagamento

    Mi scuso per il titolo ma non riesco a sintetizzare in 3 parole..
    sto facendo un programmino per la gestione di ricevute e vorrei nella homepage fare una lista "veloce" di pagamento. Mi spiego:
    il mio cliente è una piscina, e i suoi clienti sono i nuotatori.
    Quando arrivano a pagare la segretaria crea la ricevuta con un click e con un altro la manda in stampa. questo è facile, ok..
    ma..
    vorrei che nella homepage di questa applicazioncina, ci fosse una lista di "ritardatari", cioè quelli che sono più indietro con il pagamento dei mesi.
    seguendo questa
    http://forum.html.it/forum/showthrea...readid=1333442
    non sono riuscito a cavare un ragno dal buco..
    ho fatto così
    codice:
    SELECT * FROM anag_clienti LEFT JOIN ricevute ON (anag_clienti.id_anag = ricevute.id_cliente)
    WHERE mese_riferimento < CURRENT_DATE and id_ricevute NOT IN (SELECT id_ricevute FROM ricevute WHERE mese_riferimento > CURRENT_DATE)
    group by cod_fisc ORDER BY id_ricevute asc
    però non va, ovviamente
    vorrei che la select mi trovasse, se siamo a marzo, quelli che NON hanno pagato marzo ma che hanno pagato ad esempio febbraio o gennaio.. magari ordinati per data ASC..
    mese_riferimento è il mese che hanno pagato, è un campo data e metto sempre il primo giorno del mese come giorno..

    grazie a chiunque mi potrà aiutare

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955

    Re: [mysql] query ritardatari pagamento

    Originariamente inviato da telegio
    Mi scuso per il titolo ma non riesco a sintetizzare in 3 parole..
    sto facendo un programmino per la gestione di ricevute e vorrei nella homepage fare una lista "veloce" di pagamento. Mi spiego:
    il mio cliente è una piscina, e i suoi clienti sono i nuotatori.
    Quando arrivano a pagare la segretaria crea la ricevuta con un click e con un altro la manda in stampa. questo è facile, ok..
    ma..
    vorrei che nella homepage di questa applicazioncina, ci fosse una lista di "ritardatari", cioè quelli che sono più indietro con il pagamento dei mesi.
    seguendo questa
    http://forum.html.it/forum/showthrea...readid=1333442
    non sono riuscito a cavare un ragno dal buco..
    ho fatto così
    codice:
    SELECT * FROM anag_clienti LEFT JOIN ricevute ON (anag_clienti.id_anag = ricevute.id_cliente)
    WHERE mese_riferimento < CURRENT_DATE and id_ricevute NOT IN (SELECT id_ricevute FROM ricevute WHERE mese_riferimento > CURRENT_DATE)
    group by cod_fisc ORDER BY id_ricevute asc
    però non va, ovviamente
    vorrei che la select mi trovasse, se siamo a marzo, quelli che NON hanno pagato marzo ma che hanno pagato ad esempio febbraio o gennaio.. magari ordinati per data ASC..
    mese_riferimento è il mese che hanno pagato, è un campo data e metto sempre il primo giorno del mese come giorno..

    grazie a chiunque mi potrà aiutare
    Ciao, dovrebbe essere così:
    codice:
    SELECT * FROM anag_clienti 
    WHERE NOT EXISTS
    	(SELECT 'x' FROM ricevute
    	WHERE ricevute.id_cliente = anag_clienti.id
    	AND ricevute.mese_riferimento = @mese)
    Non ho capito se mese_riferimento contiene un valore numerico che indica il numero del mese o se contiene una data, nel caso di data dovresti fare una estrazione del mese dalla data.

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    mese_riferimento è il mese che hanno pagato, è un campo data
    l'avevo scritto eh!!!
    a parte gli scherzi ora la provo e ti faccio sapere

    grazie tante, per ora..

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    a occhio e croce non va.. cioè mi da tutti gli utenti dell'anagrafica, ripetuti una volta..
    dovrebbe essere che se un cliente ha pagato marzo, ma anche uno dei mesi successivi, non compare
    [comunque grazie]

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da telegio
    a occhio e croce non va.. cioè mi da tutti gli utenti dell'anagrafica, ripetuti una volta..
    dovrebbe essere che se un cliente ha pagato marzo, ma anche uno dei mesi successivi, non compare
    [comunque grazie]
    codice:
    SELECT * FROM anag_clienti 
    WHERE NOT EXISTS
    	(SELECT 'x' FROM ricevute
    	WHERE ricevute.id_cliente = anag_clienti.id
    	AND ricevute.mese_riferimento >= @mese)
    Scusa ma leggo velocemente e mi scappano alcune cose.

    Metti il >= e dovrebbe andare.

    Il senso della query che ho scritto è:
    Estraggo tutti i clienti per cui non esiste una ricevuta dal mese in questione in poi, mentre prima estraevo quelli per cui non avevano pagato solo il mese corrente. In ogni caso, puoi giocartela con una condizione proprio sul campo mese_riferimento ma la struttura è quella.

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ok, ok.. grazie per ora, ma io con SQL non sono bravissssssimo..

  7. #7
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    così funziona..
    codice:
    SELECT * FROM anag_clienti
    WHERE NOT EXISTS
    	(SELECT * FROM ricevute
    	WHERE ricevute.id_cliente = anag_clienti.id_anag AND ricevute.mese_riferimento >= CURRENT_DATE)
    ho usato current_date per essere più veloce
    ma mi recupera (ovviamente) SOLO i dati della tabella anagrafica.
    io invece ho bisogno di visualizzare l'ultimo pagamento che sta nella tabella ricevute.
    Ho provato così, facendo la join
    codice:
    SELECT * FROM anag_clienti LEFT JOIN ricevute ON (ricevute.id_cliente = anag_clienti.id_anag )
    WHERE NOT EXISTS
    	(SELECT * FROM ricevute
    	WHERE ricevute.id_cliente = anag_clienti.id_anag AND ricevute.mese_riferimento >= CURRENT_DATE)
    ma mi visualizza tuuuuutte le ricevute passate degli utenti che non hanno quelle future.. AUGH.. a questo punto CREDO di dover agire sull'ultimo "record" di ogni utente. Devo fare group by? distinct? dove devo metterlo, query o sub?

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    provando e riprovando sembra andare così:
    codice:
    SELECT *
    FROM anag_clienti
    LEFT JOIN ricevute ON ( ricevute.id_cliente = anag_clienti.id_anag )
    WHERE NOT
    EXISTS (
    
    SELECT *
    FROM ricevute
    WHERE ricevute.id_cliente = anag_clienti.id_anag
    AND ricevute.mese_riferimento >= CURRENT_DATE
    )
    GROUP BY id_anag
    ORDER BY mese_riferimento DESC
    ti pare corretta?!?!

  9. #9
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Originariamente inviato da telegio
    provando e riprovando sembra andare così:
    codice:
    SELECT *
    FROM anag_clienti
    LEFT JOIN ricevute ON ( ricevute.id_cliente = anag_clienti.id_anag )
    WHERE NOT
    EXISTS (
    
    SELECT *
    FROM ricevute
    WHERE ricevute.id_cliente = anag_clienti.id_anag
    AND ricevute.mese_riferimento >= CURRENT_DATE
    )
    GROUP BY id_anag
    ORDER BY mese_riferimento DESC
    ti pare corretta?!?!
    Ma delle ricevute hai bisogno di tutte le informazioni o di una in particolare?

    Cmq prova così:
    codice:
    SELECT *
    FROM anag_clienti c
    LEFT JOIN ricevute r ON r.id_cliente = c.id_anag
    WHERE NOT
    EXISTS (
    	SELECT 'x'
    	FROM ricevute r2
    	WHERE r2.id_cliente = c.id_anag
    	AND r2.mese_riferimento >= CURRENT_DATE
    )
    and (r.id is null or
    not exists
    	(select 'x'
    	from ricevute r3
    	where r3.id_cliente = r.id_cliente
    	and r3.mese_riferimento > r.mese_riferimento))
    In pratica sto visualizzando tutti i clienti che non hanno pagato da un mese in poi e nel caso estraggo la ricevuta (se esiste) per cui non esiste una successiva dello stesso cliente in ordine cronologico.

    Dimmi se va

  10. #10
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ad andare sembra andare..
    non vorrei dire boiate notturne...
    avevo un pagamento di un mese duplicato, e me li faceva vedere tutti e due i duplicati..
    cancellando quel record, sembra andare, e con i mesi coerenti, non messi a pisellino di quadrupede sembra proprio ok.. anche l'altra funzionava eh..
    Cosa intendi per
    tutti i clienti che non hanno pagato da un mese in poi
    quale mese? quello corrente? la tua query mica l'ho capita sà!!!

    i dati di cui ho bisogno sono quelli dell'ultima ricevuta pagata da quel cliente. con un pulsante di una form ( tutti campi hidden, eh, eh,eh... ) "duplico" quel record al mese successivo a quello dell'ultima ricevuta.. con un po' di calcoli e di controlli è relativamente facile.. tanto poi non ci sono tanti utenti che debbono usarla, è solo una persona.. moolto più facile

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.