Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    16

    [SQL] Eccezione fastidiosa

    Salve a tutti. Vi propongo un problema che m'è apparso recentemente e dal quale non riesco a cavarmi fuori.
    Ho un discreto database interno in mysql che viene utilizzato per archiviare i dati delle aziende contattate, i referenti e i dati dei vari contatti effettuati. Mi è stato richiesto di estrarre tutte le aziende cosiddette "calde", ovvero quelle che si sono dimostrate interessate ad un possibile incontro. Le tabelle prinicipali son tre: azienda, contatto e persona, legate tra di loro tramite l'id_azienda (azienda - contatto e azienda-persona) e id_persona (persona-contatto).
    Tra i vari campi della tabella contatto, quelli che m'interessano sono:
    tipocontatto = 3
    interessato = 3
    appuntamento = 0
    data appuntamento = ' ' oppure = '00/00/000'

    mentre della tabella persona m'interessa solamente questo:
    appuntamento_il = ' ' oppure = '00/00/0000'

    La query che utilizzo per estrarre le aziende "calde" è la seguente:

    SELECT * FROM azienda
    INNER JOIN contatto, persona
    ON contatto.id_azienda = azienda.id_azienda
    AND persona.id_azienda = azienda.id_azienda
    WHERE tipocontatto = 3 AND interessato = 3
    AND appuntamento = 0
    AND (data_appuntamento = ' OR data_appuntamento = '00/00/0000')
    AND (appuntamento_il = ' OR appuntamento_il = '00/00/0000')
    GROUP BY azienda ORDER BY azienda

    Il problema è che mi è capitato, cosa che m'ha fatto venire il dubbio sulla validità del tutto, che un'azienda per la quale sono presenti 4 record nella tabella "contatto", dei quali 3 hanno valore contatto.appuntamento = 0 e uno solo contatto.appuntamento = 1, venga estratta lo stesso. Il mio dubbio è che per come la query è stata strutturata, il mio recordset vada a verificare solo uno dei 4 record (magari il primo), e consideri valide le condizioni. E' possibile questo? E se si, cosa sbaglio?
    Confido nel vostro utile aiuto che s'è rivelato sempre importante e vi saluto
    ...into the infinity of thoughts...

  2. #2
    La query mi sembra strutturata discretamente e il risultato dell'interrogazione non costa di un solo record ma di n-tuple, solo quelle che soddisfano le condizioni da te richieste.

    Nel caso tu voglia solo visualizzare il primo record puoi usare la clausola LIMIT 1 al termine del comando.


    Consiglio: al posto di
    codice:
    (data_appuntamento = ' OR data_appuntamento = '00/00/0000')
    ,
    usa la sintassi:
    codice:
    (data_appuntamento is null OR data_appuntamento = '00/00/0000')

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    16
    Grazie della risposta Alberto, ma il problema non è che voglio visualizzare solo il primo record, ma bensì che temo che per qualche motivo (magari inesperienza mia nello strutturare la query), non prenda in considerazione tutti i record estrapolati dalla tabella correlata (nello specifico, la tabella "contatto" correlata alla tabella "azienda" tramite la FK id_azienda), ma nbensì solo il primo... Altrimenti non mi spiegherei che per questa azienda XXX nella tabella contatti risultano 4 contatti, dei quali uno SICURAMENTE non soddisfa i miei criteri di ricerca, ma viene estrapolata lo stesso...

    Una nota: ho provato ad inserire nelle condizioni dell' INNER JOIN la condizione appuntamento = 0. Facendo così, l'azienda incriminata non viene estrapolata, ma non sono sicuro se sia il metodo giusto, visto che avevo letto nella reference di mySQL che questo tipo di condizioni non devono essere specificate nei criteri dell' INNER JOIN...
    ...into the infinity of thoughts...

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.