Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Query mysql eliminare i duplicati

    Salve a tutti penso di commettere un banale errore di sintassi in questa query.
    Ho una tabella MYSQL fatta in questo modo che si chiama SERVIZI:

    ID_CLIENTE (KEY)
    TIPO_SERVIZIO
    COSTO
    DATA (KEY)
    ORA (KEY)

    Mentre ho un altra tabella molto simile chiamata acquisti:
    ID_CLIENTE (KEY)
    PRODOTTO
    COSTO
    DATA (KEY)
    ORA (KEY)

    Vorrei estrarre da una e dall'altra tabella il numero di passaggi giornalieri dei clienti:
    un cliente puo' essere registrato perche ha effettuato un servizio, perchè ha acquistato un prodotto o perchè ha effettuato entrambi.

    Con la query:
    Codice PHP:
    SELECT count(DISTINCT data,ora) AS tot_passaggi FROM servizi WHERE data '$datai' AND data '$dataf' GROUP BY id_cliente ORDER BY count(*) DESC,SUM(costoDESC 
    Prelevo i passaggi dei clienti che hanno effettuato un servizio tra due date fissate $datai e $dataf.
    Stessa cosa per gli acquisti:

    Codice PHP:
    SELECT count(DISTINCT data,ora) AS tot_passaggi FROM acquisti WHERE data '$datai' AND data '$dataf' GROUP BY id_cliente ORDER BY count(*) DESC,SUM(costoDESC 
    Il problema sorge quando un cliente ha effettuato sia un acquisto e contemporaneamente un servizio. Effettuando la somma delle due query precedenti il risultato sarebbe falsato poichè mi darebbe 2 passaggi quando un cliente ne ha effettuato 1. Ho pensato di sottrarre alla somma delle due query il risultato di questa query (ossia tutti i clienti che hanno effettuato un acquisto e contemporaneamente un servizio in modo da ottenere il risultato esatto)

    Codice PHP:
    mysql_num_rows(mysql_query("SELECT id_cliente, data AS d, ora AS o FROM acquisti WHERE data > '$datai' AND data < '$dataf' AND id_cliente IN (SELECT id_cliente FROM servizi WHERE data = 'd' AND ora = 'o')")) 
    Tuttavia penso di commettere qualche errore di sintassi poichè il risultato è sempre 0.
    Grazie
    Ultima modifica di theboss280489; 28-01-2014 a 20:24

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Se il problema è una query, l'argomento è MySQL, quindi Database, non PHP.
    Ti sposto.

  3. #3
    L'errore e' che mysql_query con SELECT rende il resource id# e non il numero delle righe trovate.
    Comunque non capisco la subquery ... che significa il where?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    L'errore e' che mysql_query con SELECT rende il resource id# e non il numero delle righe trovate.
    Comunque non capisco la subquery ... che significa il where?
    Si giusto... Provo a scriverlo diversamente.
    comunque la query ha questo significato: selezionare i clienti che hanno effettuato contemporaneamente un acquisto e un servizio: la subquery significa seleziona i clienti che hanno effettuato un servizio lo stesso giorno e ora della data in cui hanno effettuato un servizio (d e o con cui sono chiamati gli alias di data e ora nella query principale)

  5. #5
    Non puoi usare gli alias nel where perche'questo (il where) viene risolto subito dopo il nome tabella e prima dei campi da selezionare. Quindi non esistono ancora gli alias.

    Potresti fare una JOIN se gli idCliente sono uguali in entrambe le tabelle per ogni cliente.
    Perche fare due campi data e ora quando ne potrebbe bastare uno DATETIME?

    Nelle query precedenti fai il SUM() del costo nel order by..... sei certo di questo?

    Mettiamo caso che nel periodo indicato (giorni? ore?) ci siano piu' acquisti e piu' servizi come faresti a distinguere quanti e quali?

    Azzolina... mi accorgo ora che ho fatto piu' domande che dare risposte....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Grazie per il suggerimento, delle altre cose sono sicuro...

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.