Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    [MYSQL] Help queery (forse il left join non è la soluzione?

    Help ho questa query che funziona. (ho messo un select * per semplificare ma nella query reale ho scritto i nomi dei campi che voglio estrapolare)

    codice:
    SELECT *
    FROM ticket 
    INNER JOIN clienti on ticket.idcliente = clienti.idcliente 
    INNER JOIN impianto on ticket.idimpianto = impianto.idimpianto 
    INNER JOIN localita ON impianto.idlocalita = localita.idlocalita 
    WHERE ticket.chiuso='no' and impianto.attivo='si' 
    ORDER BY dataapertura, numero, nome, localita, provincia
    Adesso vorrei far apparire l'ultimo aggiornamento del ticket che lo trovo nella tabella "ticket_agg" così:

    codice:
    SELECT * FROM `ticket_agg` WHERE idticket='3' order by dataagg desc LIMIT 1
    Come posso unire le due query?
    Avevo pensato ad un left join (visto che il campo potrebbe anche essere vuoto), ma non potrei mettere "Order by dataagg desc LIMIT 1"

    Grazie

  2. #2
    ma la data di aggiornamento sta in una tabella diversa da 'ticket' ?

  3. #3
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    SI!
    Tabella ticket >>> ha la data di apertura e i dati di apertura
    Tabella agg_ticket >>> ha tutti gli aggiornamenti con relativa data

    Per cui un ticket può avere più aggiornamenti come non averli.

    Adesso questa cosa appunto la gestisco tramite php che arrivata alla riga verifico con una query se ci sono aggiornamenti e visualizzo l'ultimo con un "order by dataagg desc LIMIT 1"
    Vorrei fare tutto con una query in modo da poter migliorare gli ordinamenti.

    Grazie

  4. #4
    com'è fatta la tabella agg_ticket e come si relaziona con la tabella ticket?

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie!

    Ticket
    idticket
    numero
    dataapertura
    idimpianto
    ecc...

    ticket_agg
    idagg
    idticket <<< per relazione
    dataaggiornamento
    ecc..
    Ultima modifica di Sonikag; 27-07-2023 a 18:50

  6. #6
    puoi aggiungere

    codice:
    ... JOIN (SELECT idTicket, MAX(dataaggiornamento) AS aggiornato_al FROM ticket_agg GROUP BY idTicket) AS agg ON ticket.idticket= agg.idticket
    e metti agg.aggiornato_al nella SELECT principale

  7. #7
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Funziona grazie!
    Avevo semplificato mooolto adesso ho un'altra roba da joinnare in quel modo!
    (E se vuoi farti una risata non mi funzionava perchè non trovava il campo agg.aggiornato_al che ovviamente avevo aggiunto alla select... alla 400esima volta mi sono accorta di avere scritto ass

  8. #8
    optime! posta la query completa funzionante

  9. #9
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    QUERY FUNZIONANTE:
    codice:
    SELECT ticket.idticket, ticket.chiuso, ticket.assegnatopers, ticket.assegnatoruolo, ticket.numero, ticket.dataapertura, clienti.idcliente, nome, nomeimp, impianto.idimpianto, impianto, impianto.indirizzo, localita, impianto.potenza, provincia, agg.aggiornato_al
    FROM ticket 
    INNER JOIN clienti on ticket.idcliente = clienti.idcliente 
    INNER JOIN impianto on ticket.idimpianto = impianto.idimpianto 
    INNER JOIN localita ON impianto.idlocalita = localita.idlocalita 
    LEFT JOIN (SELECT idticket, MAX(dataagg) AS aggiornato_al FROM ticket_agg GROUP BY idticket ORDER BY aggiornato_al) AS agg ON ticket.idticket= agg.idticket 
    WHERE ticket.chiuso='no' and impianto.attivo='si' ORDER BY dataapertura, numero, nome, localita, provincia
    Io però della riga dell'ultimo aggiornamento ho bisogno di sapere anche i campi "assegnatoruolo" e "assegnatopers" e aggiungendoli alla query come sotto se ho più aggiornamenti non mi visualizza sempre quelli della riga dell'ultimo aggiornamento

    codice:
    SELECT ticket.idticket, ticket.chiuso, ticket.assegnatopers, ticket.assegnatoruolo, ticket.numero, ticket.dataapertura, clienti.idcliente, nome, nomeimp, impianto.idimpianto, impianto, impianto.indirizzo, localita, impianto.potenza, provincia, agg.aggiornato_al, agg.assegnatoruolo_agg, agg.assegnatopers_agg 
    FROM ticket 
    INNER JOIN clienti on ticket.idcliente = clienti.idcliente 
    INNER JOIN impianto on ticket.idimpianto = impianto.idimpianto 
    INNER JOIN localita ON impianto.idlocalita = localita.idlocalita 
    LEFT JOIN (SELECT idticket, MAX(dataagg) AS aggiornato_al, assegnatoruolo as assegnatoruolo_agg, assegnatopers as assegnatopers_agg FROM ticket_agg GROUP BY idticket) AS agg ON ticket.idticket= agg.idticket 
    WHERE ticket.chiuso='no' and impianto.attivo='si' 
    ORDER BY dataapertura, numero, nome, localita, provincia
    In quel modo MAX(dataagg) AS aggiornato_al è corretto in quanto è la data ultima modifica.
    Però non è corretto aggiornato_al, assegnatoruolo as assegnatoruolo_agg, assegnatopers as in quanto essendoci più aggiornamenti non mi prende necessariamente quelli dell'ultimo aggiornamento.

    Su singolo ticket funziona così... però non è adattabile in quanto seleziono solo una riga.
    codice:
    SELECT idticket, dataagg AS aggiornato_al, assegnatoruolo as assegnatoruolo_agg, assegnatopers as assegnatopers_agg FROM ticket_agg WHERE idticket=3 ORDER BY aggiornato_al desc LIMIT 1
    Grazie

  10. #10
    non l'avevi detto prima...

    comunque, devi fare un'ulteriore subquery, così:

    codice:
    SELECT
    	idticket, 
    	dataaggiornamento, 
    	assegnatoruolo, 
    	assegnatopers 
    FROM 
    	ticket_agg T1
    	JOIN (SELECT idTicket, MAX(dataaggiornamento) AS aggiornato_al FROM ticket_agg GROUP BY idTicket) T2
    	ON T1.idtcket=T2.idTicket AND T1.dataggiornamento=T2.aggiornato_al
    tieni presente che se hai più aggiornamenti nella stessa data, e in dataaggiornamento non hai anche l'ora, la query potrebbe riportarti un risultato errato

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.