Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [mysql] Select su relazione many-to-many

    Salve ragazzi, ho 3 tabelle
    U
    id|uri|host
    1 |xxx|h1
    2 |xxx|h2
    3 |xxx|h2
    4 |xxx|h3

    UK
    id|uid|kid|datetime
    1 | 1 | 2 |
    2 | 1 | 3 |
    3 | 2 | 4 |
    4 | 2 | 2 |
    5 | 4 | 2 |
    6 | 4 | 1 |
    7 | 3 | 4 |

    K
    id|name
    1 |name1
    2 |name2
    3 |name3
    4 |name4


    expected result:

    K1 has 1 host
    K2 has 3 host
    K3 has 1 host
    K4 has 1 host (!! there are 2 U in the same host)



    Voi come fareste a trovare quanti U.host sono presenti per una K (su tutte le K)?
    Questa volta, più che un voto.. è favoreggiamento.

  2. #2
    select kid,count(uid) .... group by kid
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    select kid,count(uid) .... group by kid
    NO perchè count(uid) non mi fa un raggrupamento per host..

    in pratica devo sapere quanti host ospitano una determinata key, per tutte le key mica facile!
    Questa volta, più che un voto.. è favoreggiamento.

  4. #4
    UK
    id|uid|kid|datetime
    1 | 1 | 2 |
    2 | 1 | 3 |
    3 | 2 | 4 |
    4 | 2 | 2 |
    5 | 4 | 2 |
    6 | 4 | 1 |
    7 | 3 | 4 |

    ad esempio qui :

    raggruppo per kid nel caso di kid=2.. il gruppo di kid=2 mi restituisce un count(uid) pari a 3
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    raggruppo per kid nel caso di kid=2.. il gruppo di kid=2 mi restituisce un count(uid) pari a 3
    corretto, infatti è lo stesso risultato che ho messo sopra.. ma prova con kid=4

    il tuo esempio da 2 mentre dovrebbe essere 1..
    Questa volta, più che un voto.. è favoreggiamento.

  6. #6
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    corretto, infatti è lo stesso risultato che ho messo sopra.. ma prova con kid=4

    il tuo esempio da 2 mentre dovrebbe essere 1..

    e' giusto che sia 2, c'e un motivo per cui dovrebbe essere 1?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  7. #7
    si, il motivo è che U.id-2 e U.id-3 hanno lo stesso host "h2"

    devo contare quanti host usano una Keyword

    è questo che non riesco a scrivere
    Questa volta, più che un voto.. è favoreggiamento.

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Su AS400 questo, penso, funzionerebbe. Ma con MySQL ?

    codice:
    select K.id, count(distinct u.host) 
    from K
    inner join UK on K.id   = UK.kid
    inner join U  on UK.uid = U.id
    group by K.id
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Con Mysql:

    Codice PHP:
    SELECT K.*, COUNT(DISTINCT U.host) AS tot FROM keywords K INNER JOIN uris_keywords UK ON K.id UK.kid INNER JOIN uris U ON UK.uid U.id GROUP BY K.id ORDER BY tot DESC 
    perfetta bravissimi!
    Questa volta, più che un voto.. è favoreggiamento.

  10. #10
    Riapro la discussione,


    dovrei tenere solamente i primi 25 risultati della query, è possibile farlo direttamente su mysql senza scomodare php?
    Questa volta, più che un voto.. è favoreggiamento.

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.