Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di ehijon
    Registrato dal
    Jan 2006
    Messaggi
    42

    [MYSQL] IN() o LEFT JOIN

    Ciao, ho un problemino con una query e non ne vado a capo.

    TABELLA

    ID --------- ID_USER ------- ID_ARGUMENT
    1 ----------- 1 ---------------- 1
    2 ----------- 2 ---------------- 1
    3 ----------- 3 ---------------- 4
    4 ----------- 4 ---------------- 2
    5 ----------- 1 ---------------- 6
    6 ----------- 3 ---------------- 6
    7 ----------- 8 ---------------- 6


    Con la query vorrei che mi venisse restituito l'id_argument che due id_user hanno in comune.
    Per esempio se inserisco 1 e 3 mi dovrebbe uscire 6, se inserisco 1 e 2 mi dovrebbe uscire 1...

    ho guardato un po i JOIN e gli IN() ma non ne vengo a capo...

  2. #2
    Ciao,

    Io farei così:
    tu fai la tua brava select in sql raggruppando per id_argument
    codice:
    SELECT id_argument, count( * ) AS conta FROM tabella WHERE id_user IN ( 1, 3 ) GROUP BY id_argument
    Questa ti restituirà tre row:
    row0:1,4
    row1:4,1
    row2:6,2


    poi nel while con cui fetchi il resultset farai i tuoi controlli quando trovi che un id_argument che ha 'conta' =2 volte saprai che quello lì è in comune ai due id_user

    Codice PHP:
    $result=mysql_query('SELECT id_argument, count( * ) AS conta FROM tabella WHERE id_user IN ( 1, 3 ) GROUP BY id_argument');

    $iSharedArgument=null;
    while (
    $row mysql_fetch_array($result)) 
    {
       if (
    $row[1]==2
           
    $iSharedArgument=$row[0];
    }
    if (isset(
    $iSharedArgument)) echo "l'argomento in comune è $iSharedArgument";
    else 
    "nessun argomento in comune"
    bytez
    p.h

  3. #3
    Utente di HTML.it L'avatar di ehijon
    Registrato dal
    Jan 2006
    Messaggi
    42
    Grazie davvero!

    il tuo sistema funziona, ma volevo fare tutto da mysql per velocità senza passare da php. alla fine son riuscito a trovare questa soluzione. è un inner join sulla stessa tabella

    http://forum.html.it/forum/showthread/t-1422918.html


    ciao

  4. #4
    Visto che avevi postato in PHP e non in DATABASE pensavo che volessi anche un po' di php!!

    cmq se volevi saltare il controllo php ti bastava aggiungere HAVING COUNT(*)=2 alla fine della select

    codice:
    SELECT id_argument, count( * ) AS conta FROM tabella WHERE id_user IN ( 1, 3 ) GROUP BY id_argument HAVING COUNT(*)=2
    e ti tirava fuori già solo il record giusto (e in maniera più performante della soluzione con INNER JOIN ...direi)
    row0:6,2


    ciao
    p.h.

  5. #5
    Utente di HTML.it L'avatar di ehijon
    Registrato dal
    Jan 2006
    Messaggi
    42
    ah, capito... grazie ancora

  6. #6
    Ciao,

    per i problemi relativi all'sql c'è l'apposita sezione "Database", non sposto perché ormai hai risolto ma per il futuro, gentilmente, apri li la discussione.

    Grazie
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.