Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505

    MySql - ritornare un campo 1 dopo l'unione se rispetta una condizione - 0 altrimenti

    Salve,

    io ho due tabelle :

    1 - tracklist, vari campi e un trackid
    2 - radded, dove ho trackid e user

    Io vorrei ritornare la lista di tutte le tracklist più un campo, chiamato per esempio "esiste", che deve contenere 1 se in radded c'è un determinato user associato al trackid per ogni tracklist, 0 altrimenti.

    Ho provato a scrivere questo :

    codice:
    SELECT tracklist.trackid, artist, event, date, radded.user
    FROM tracklist JOIN radded ON tracklist.trackid=radded.trackid AND radded.user="luigi"
    ORDER by adddate DESC
    Ma non sò come dire a MySql di ritornare 1 se l'utente esiste, 0 altrimenti.

    Idee? Saluti e grazie

  2. #2
    Non sono sicuro di aver capito per bene. dovresti usare LEFT JOIN e controllare se nel campo radded.user c'e' un NULL significa che non c'e' in quel record.

    codice:
    SELECT tracklist.trackid, artist, event, date, 
    if(radded.user IS NULL, 0, radded.user) as user
    FROM tracklist 
    LEFT JOIN radded ON tracklist.trackid=radded.trackid
    WHERE radded.user = "luigi"
    ORDER by adddate DESC
    in questo modo hai due opzioni radde.user se esiste, 0 se non esiste
    la condizione "luigi" devi metterla nel where.

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    Uhm no non funziona. Se in radded non esiste l'utente per il trackid relativo alla riga che stà "costruendo" non mi stampa la riga...

  4. #4
    Originariamente inviato da markzzz
    Uhm no non funziona. Se in radded non esiste l'utente per il trackid relativo alla riga che stà "costruendo" non mi stampa la riga...
    beh! si ovvio. Non ci avevo fatto caso che nel where cerchi 'luigi'.

    Quindi il problema non si pone. Se non esiste significa che non e' sicuramente associato. Ultimamente faccio fatica a capire il progetto e la logica usata per le query. Infatti avevo premeso di non essere certo di aver capito.

    Prova ad usare count(*) almeno ti rendera' sempre un record con 0 oppure con il numero delle ricorrenze trovate.

    codice:
    SELECT count(*) as tot
    FROM tracklist 
    INNER JOIN radded ON tracklist.trackid=radded.trackid
    WHERE radded.user = "luigi"
    GROUP BY radded.user
    se ti rende un numero > 0 rifai la query per vedere tutte le ricorrenze. Se rende 0 "luigi" non e' associato

    codice:
    SELECT tracklist.trackid, artist, event, date, radded.user
    FROM tracklist 
    INNER JOIN radded ON tracklist.trackid=radded.trackid
    WHERE radded.user = "luigi"
    ORDER by adddate DESC
    Presumendo che hai una tabella di nomi con una associazione trackid molti tracklist a uno radden .....

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    Uhm mi sà che non hai capito il problema Provo a spiegarmi meglio...

    Io voglio che mi torni per ogni trackid (che è univoco) della tabella tracklist una riga con i dati trackid, artist, event, date più un eventuale campo uguale a 1 se, per ogni riga, nella tabella radded esiste una riga con il trackid+user (specificato da me), 0 altrimenti. Inoltre nella tabella radded può esistere una sola corrispondeza trackid-user...

    E' più chiaro?

    Es :

    tracklist
    trackid artist event date
    123 art1 eve1 date1
    321 art1 eve1 date1
    456 art1 eve1 date1
    298 art1 eve1 date1
    565 art1 eve1 date1

    radded :
    trackid user
    123 luigi
    123 mario
    321 luigi
    298 mario
    298 antonio

    se l'utente che cerco è luigi, dovrà stamparmi :
    123 art1 eve1 date1 1
    321 art1 eve1 date1 1
    456 art1 eve1 date1 0
    298 art1 eve1 date1 0
    565 art1 eve1 date1 0

  6. #6
    Se metti nel where la condizione 'luigi' escludi tutti i record in cui 'luigi' non e' presente. Prova a metterlo nella if().

    codice:
    $nome = 'luigi';
    
    $query = " 
    SELECT tracklist.trackid, artist, event, date,
    if(radded.user = '$nome', 1, 0) as esiste
    FROM tracklist 
    INNER JOIN radded ON tracklist.trackid=radded.trackid
    ORDER by esiste DESC, adddate DESC
    ";

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

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    ha ancora un piccolo problema : le righe che mi devono tornare devono essere univoche.
    Così, ho messo un group by trackid. Facendo così però, solo alcune righe avranno 1, le altre anche se ci dovrebbe essere l'1 hanno lo 0. E il group by non mi assicura di prendere quelle "corrette"...

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    doppio post...scusate...

  9. #9
    Originariamente inviato da markzzz
    ha ancora un piccolo problema : le righe che mi devono tornare devono essere univoche.
    Così, ho messo un group by trackid. Facendo così però, solo alcune righe avranno 1, le altre anche se ci dovrebbe essere l'1 hanno lo 0. E il group by non mi assicura di prendere quelle "corrette"...
    Prova ad usare distinct. si estende a tutta la select senza fare raggruppamenti.

    select distinct .... etc

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

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    505
    no non funziona nemmeno così...

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.