Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034

    SELECT in base alla presenza di un campo

    codice:
    SELECT tab1.*, tab2.campo2 FROM tab1, tab2 WHERE tab1.campo1=xx ORDER BY tab2.campo2 DESC LIMIT 1
    la query restituisce, normalmente, un record.
    Ma nel caso in cui tab2.campo2 è vuoto, restituisce 0 righe: come faccio a farmi resituire comunque una riga con gli altri campi anche se il tab2.campo2 è vuoto?

  2. #2
    ma qual'e' la relazione tra le due tabelle??? intendo il campo in comune su cui fai la join.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    hanno entrambe un campo 'user_id' con gli stessi valori

  4. #4
    Originariamente inviato da meganoide
    hanno entrambe un campo 'user_id' con gli stessi valori
    deve essere presente per definire la join... la tua query potra' essere sintatticamente senza errori ma non e' una query corretta.

    usa left join invece dell'inner join che sta usando ora.

    se il campo e' vuoto restituisce NULL che volendo puoi gestire con una if.

    Aspetta... vuoto il campo2 ma non user_id ????

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    Originariamente inviato da piero.mac
    deve essere presente per definire la join... la tua query potra' essere sintatticamente senza errori ma non e' una query corretta.

    usa left join invece dell'inner join che sta usando ora.

    se il campo e' vuoto restituisce NULL che volendo puoi gestire con una if.

    Aspetta... vuoto il campo2 ma non user_id ????
    in pratica, se l'utente scrive qualcosa, in tab2.campo2 inserisco la data dell'articolo: se non scrive nulla, predefinito è 0.

    user_id, invece, c'è sempre in entrambe le tabelle, in quanto è l'user_id dell'utente loggato

  6. #6
    Originariamente inviato da meganoide
    in pratica, se l'utente scrive qualcosa, in tab2.campo2 inserisco la data dell'articolo: se non scrive nulla, predefinito è 0.

    user_id, invece, c'è sempre in entrambe le tabelle, in quanto è l'user_id dell'utente loggato
    Pensavo all'assenza del record nella seconda tabella....

    Non dovrebbe succedere quello che dici (record zero) , anche perche' ordinando per record2 DESC i record vuoti starebbero al fondo.

    codice:
    SELECT tab1.*, tab2.campo2 
    FROM tab1, tab2 
    WHERE tab1.campo1 = tab2.campo1
    and tab1.campo1 = xx 
    ORDER BY tab2.campo2 DESC 
    LIMIT 1
    prova ad aggiungere il riferimento tra tabelle nel where

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

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    non mi trovo:
    codice:
    SELECT news_utenti.*, news.data_pubb 
    FROM news_utenti, news 
    WHERE news_utenti.user_id = news.user_id
    AND news_utenti.user_id = 28 
    ORDER BY news.data_pubb DESC 
    LIMIT 1
    se nella tabella 'news' non sono presenti records per quell'user_id (in questo caso, 28), la query non resituisce nulla, nemmeno gli alti campi (news_utenti.*) che invece sono settati.

  8. #8
    Originariamente inviato da meganoide
    non mi trovo:
    codice:
    SELECT news_utenti.*, news.data_pubb 
    FROM news_utenti, news 
    WHERE news_utenti.user_id = news.user_id
    AND news_utenti.user_id = 28 
    ORDER BY news.data_pubb DESC 
    LIMIT 1
    se nella tabella 'news' non sono presenti records per quell'user_id (in questo caso, 28), la query non resituisce nulla, nemmeno gli alti campi (news_utenti.*) che invece sono settati.
    ma allora e' come avevo immaginato prima. NON c'e' la ricorrenza, cioe' manca il record e non che il campo data_pubb e' vuoto.

    Devi fare LEFT JOIN invece di INNER JOIN.

    codice:
    SELECT news_utenti.*, news.data_pubb 
    FROM news_utenti
    LEFT JOIN news ON news_utenti.user_id = news.user_id
    WHERE news_utenti.user_id = 28 
    ORDER BY news.data_pubb DESC 
    LIMIT 1

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

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    6,034
    grazie, ora va.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.