Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    29

    Non funziona la query se una tabella è vuota..

    ciao a tutti! ho uno strano problema : ho una query con dei JOIN tra 4 tabelle. Il problema viene fuore si una di queste tabelle non contiene righe , che soddisfino o meno i criteri di ricerca nella query! :

    ecco l'echo della query:
    SELECT users.name, users.surname, appointments.start, appointments.comment_user, operations.name AS operation FROM
    users JOIN
    users_relations
    JOIN appointments
    JOIN operations
    ON ( users.id = users_relations.id_slave OR users.id =2 )
    AND appointments.id_user = users.id
    AND operations.id = appointments.id_operation
    WHERE (users_relations.id_master = 2 OR users.id= 2)
    AND appointments.start >= 1264266256
    ORDER BY appointments.start ASC

    la tabella incriminata al monento è la users_relations . se questa tabella è vuota, la query mi restituisce zero righe!
    Se invece riempio la tabella anche di una sola riga, con valori (id_master, id_slave) anche diversi da quelli che ricerco in questa query, ottengo il funzionamento della query.

    sapete aiutarmi?

    grazie infinite

    Luca

  2. #2
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    secondo me dipende dalle relazioni esterne che hai fatto tra le tabelle.
    forse hai usato dei campi con tipologia dati differente.
    2000 post e sono più vecchio di 4 anni...
    grazie a tutti....

  3. #3
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230

    Re: Non funziona la query se una tabella è vuota..

    [...]WHERE (users_relations.id_master = 2 [...]


    users_relations . se questa tabella è vuota, la query mi restituisce zero righe!
    Qui urge l'intervento del Capitan Ovvio

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    29
    Vè capitan ovvio ... Io so che dopo quello che mi hai quotato ci metto un OR (come difatti c'è), anche sela clausola non è rispettata ma la seconda sì, dovrebbedarmi lo stesso un risultato... E di fatti comeho scritto prima, se anche nella tab USERS.RELATIONS non ho alcun Id_master con valore 2, la query mirestituisce cmq le altre righe. Se invece la tab è proprio vuota, non mi da niente anche se l'alrra clausola dell' OR è rispettata

    ...

    ?
    Boh

    grazie cmq

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Mi sa che non hai le idee molto chiare su quello che vuoi fare. O quantomeno su come farlo

  6. #6
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Originariamente inviato da sphinx
    Vè capitan ovvio ... Io so che dopo quello che mi hai quotato ci metto un OR (come difatti c'è), anche sela clausola non è rispettata ma la seconda sì, dovrebbedarmi lo stesso un risultato... E di fatti comeho scritto prima, se anche nella tab USERS.RELATIONS non ho alcun Id_master con valore 2, la query mirestituisce cmq le altre righe. Se invece la tab è proprio vuota, non mi da niente anche se l'alrra clausola dell' OR è rispettata

    ...

    ?
    Boh

    grazie cmq
    Scusami, in realta' volevo quotare la stessa parte che pero' sta nella ON. Il fatto e' che tu unisci le tabelle, e poi, metti tra le altre cose, una clausola restrittiva come condizione join. Di regola, nelle ON ci vanno le condizioni su come unire le tabelle, mentre quelle su come restringere la ricerca ci vanno nella where. Non che sia sbagliato come sintassi, semplicemente una condizione restrittiva puo' risultare in una cross join, che raramente trova applicazione nella pratica.
    Considera anche che una inner join con una tabella vuota ti restituira' sempre una tabella vuota, indipendentemente da cosa c'e' nella prima tabella e da che condizioni metti. Era questa la parte ovvia

    Quindi succede che: se la tua users_relations e' vuota, l'inner join chiaramente ti da' un recordset vuoto. Se invece c'e' qualsiasi cosa, per via dell'OR, scatta la condizione users.id=2 (che probabilmente esiste sempre), e ottieni un quasi cross join come risultato.

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    29
    grazie grazie!

    pensavo pure io di dovere fare qualcosa con le JOIN ... magari fare un LEFT o .. ? boh. ma non una INNER.

    ora provo ... cioè . "ora" .. in sti giorni
    grazie ancora
    cia!

    PS cos'è una cross join?

  8. #8
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    Cross join e' il prodotto cartesiano, cioe ogni riga da una tabella viene abbinata ad ogni riga della seconda tabella.
    Quindi se da una parte ci sono 3 righe e dall'altra 4 - ottieni una tabella con 12 righe.
    In mysql, se tu fai una inner join senza una condizione valida di relazione tra campi, di fatto ottieni una cross join.

    Cmq, il problema non e' principalmente che join usi - ma come lo usi. La tua query e' un po strana, e denota il fatto che non capisci bene ogni sua parte, e stai andando a caso.. Ti consiglierei di leggere qualche guida, dovrebber esserci qualcosa anche su html.it

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.