Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178

    [MySQL] select con variabili, join e group by

    ho una tabella dove ogni elemento ha una categoria tra tre possibili e devo stampare una select che restituisca gli elementi divisi per categoria, ovvero

    codice:
    ___________________
    ID    |  categoria
    ___________________
    1     |     a
          |
    2     |     a
          |
    3     |     b
          |
    4     |     a
          |
    5     |     b
          |
    6     |     c
          |
    7     |     c
    
    
    
    select;
    __________________
    A   |   B    |  C
    __________________
    1   |   3    |  6
        |        |
    2   |   5    |  7
        |        |
    4   |  null  | null


    ho provato con la ridenominazione con variabili sulla stessa tabella presa più volte ma non riesco a definire la clausola di selezione WHERE e a fare in modo che i risultati nelle singole colonne non siano ripetuti, DISTINCT lavora sulle righe quindi non funziona, il groupby invece mi collassa tutti i risultati restituendo una sola riga quindi è inadatto al caso, ho provato a usare il right JOIN ma non riesco a impostare la clausola WHERE per determinare il criterio di selezione degli elementi per ogni categoria, per ora con due variabili ho provato questa:

    codice:
    SELECT 1.ID as A, 2.ID as B
    
    FROM Tabella as 1 RIGHT JOIN Tabella as 2
    
    ON 1.Categoria='a' AND 2.Categoria='b';

    ma ancora non và, come si può fare (se si può fare)?
    è troppo impegnativo...

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    L'unica cosa che mi viene in mente è questa

    codice:
    select 
    case when categoria = 'a' then id else null end as 'a',
    case when categoria = 'b' then id else null end as 'b',
    case when categoria = 'c' then id else null end as 'c'
    from tabella
    però la visualizzazione non è quella che chiedi.

  3. #3
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    vero ma è molto vicino a ciò che dovrei ottenere, è un buon risultato

    l'unico problema sarebbe far sparire/collassare i null di troppo...
    è troppo impegnativo...

  4. #4
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    mi manca solo questa operazione e poi posso stampare tutto...help
    è troppo impegnativo...

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Tramite mysql non so se sia possibile ottenere la visualizzazione che vuoi. Temo di no. Ti conviene eseguire la query come te l'ho scritta, riversare tutto in un array multidimensionale e poi ciclarlo.

  6. #6
    Utente di HTML.it L'avatar di TeraBIT
    Registrato dal
    Dec 2005
    Messaggi
    178
    ho provato a sostituire i NULL con un carattere vuoto '', così il risultato è ben leggibile (anche se non vengono collassati)

    codice:
    SELECT
    case when categoria = 'a' then id else ‘’ end as 'C_a',
    case when categoria = 'b' then id else ‘’ end as 'C_b',
    case when categoria = 'c' then id else ‘’ end as 'C_c'
    FROM tabella;
    mi chiedo se non esista una istruzione/comando da inserire dopo ELSE così che invece di inserire un valore (ID/null/'') il campo non venga selezionato affatto... :master:
    è troppo impegnativo...

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ripeto, solo tramite sql non mi risulta sia fattibile ciò che chiedi. In php una possibile soluzione è questa:

    Codice PHP:
    $query mysql_query("select 
                          case when categoria = 'a' then id end as a,
                          case when categoria = 'b' then id end as b,
                          case when categoria = 'c' then id end as c
                          from tabella"
    ) or die(mysql_error());

    $str '';
    while (
    $row mysql_fetch_assoc($query)) {
      
    $row['a'] != NULL $arr['a'][]= $row['a'] : '';
      
    $row['b'] != NULL $arr['b'][]= $row['b'] : '';
      
    $row['c'] != NULL $arr['c'][]= $row['c'] : '';
    }


    $righe max(count($arr['a']),count($arr['b']),count($arr['c']));

    $str.= '<table>';
    for (
    $i 0$i $righe$i++) {
      
    $str.='<tr>';
          
    array_key_exists($i,$arr['a']) ? $str.='<td>'.$arr['a'][$i].'</td>' $str.='<td></td>';
          
    array_key_exists($i,$arr['b']) ? $str.='<td>'.$arr['b'][$i].'</td>' $str.='<td></td>';
          
    array_key_exists($i,$arr['c']) ? $str.='<td>'.$arr['c'][$i].'</td>' $str.='<td></td>';
      
    $str.='</tr>';
    }
    $str.='</table>';
    echo 
    $str

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.