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

    php mySQL, query complessa

    ciao a tutti, ho bisogno di fare una query o di trovare una soluzione mediante array forse ma non so come gestirla al meglio.

    In pratica c'è una tabella "ticket" (di assistenza) e una tabella esterna con "interventi" con i post per ciascun ticket (domande e risposte dello staff tecnico). Ogni ticket prevede molti interventi, chiaramente.

    Nella pagina di riepilogo ticket, io vorrei mostrare un elenco con: data di apertura ticket e primo intervento (che è poi la richiesta iniziale di assistenza).

    - Se faccio una inner join fra ticket e interventi me li tira fuori tutti.

    - Potrei inserire una SELECT all'interno del ciclo che estrae i ticket, ma forse è un approccio che carica inutilmente il database (chiedo!).

    - O mi viene in mente che in qualche modo potrei forse cavarmela tramite array.

    Siccome sono in dubbio, se qualcuno ha qualche idea sarei proprio curioso di imparare questa cosa nuova per me!

    Grazie a tutti gli amici di questo forum

    Emiliano

  2. #2
    scrivi la struttura delle tabelle e magari la tua query dove ti sei incagliato che iniziamo a pensarci almeno

  3. #3
    ciao punkrazio, banalmente la semplifico così togliendo il superfluo:

    Tabella ticket: id_ticket | ext_utente | data_apertura

    Tabella interventi: id_intervento | ext_ticket | testo

    Al momento nel riepilogo faccio vedere solo i dati del ticket con una banale

    codice:
    SELECT * FROM ticket
    Il mio scopo sarebbe di selezionare per ogni ticket anche il primo intervento (= id inferiore, cioè quello di apertura del ticket) tra quelli che potrei estrarre se facessi INNER JOIN tra le due tabelle (ON ticket.id_ticket=interventi.ext_ticket).

    Chiaro che con una select dentro il loop che scrive l'elenco dei ticket potrei risolvere, ma mi pare uno stress del db evitabile (se x ipotesi ci sono 100 ticket farei 100 query di Select sugli interventi solo per cavarne 1 x ticket!!).

    Spero di essere stato chiaro, grazie per il tuo interessamento!

    ciao

  4. #4
    sperando di aver capito bene:

    SELECT id_ticket, ext_utente, data_apertura, MIN(id_intervento)
    FROM ticket
    LEFT JOIN interventi ON ticket.id_ticket = interventi.ext_ticket
    GROUP BY id_ticket

  5. #5
    Originariamente inviato da ienavr
    sperando di aver capito bene:

    SELECT id_ticket, ext_utente, data_apertura, MIN(id_intervento)
    FROM ticket
    LEFT JOIN interventi ON ticket.id_ticket = interventi.ext_ticket
    GROUP BY id_ticket
    questa non estrae anche i ticket che non hanno nessun intervento?? spero di non sbagliare

    se è questo che volevi dovrebbe andare più che bene la query del nostro amico

    se non è questo potresti farci qualche esempio in più per capire meglio

    ciauz

  6. #6
    ciao punkrazio, ciao iena,

    non avevo pensato alla funzione group by, di solito la uso per fare delle somme o delle medie, mi aiutate a capirla in questo caso?

    Mi sembra di capire che (giustamente!) non avrò una riga per ogni intervento, dato che raggruppo per id_ticket, corretto?

    Non mi è chiaro però come stabilisco nella query che tra tutti gli interventi collegati a un certo ticket, mi pescherà proprio il primo! E' perchè l'ordine per id intervento è di default?

    (domanda oziosa, se avessi voluto pescare il 2o e non il 1o come avrei fatto?)

    grazie per la pazienza e disponibilità!

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.