• User

    prodotti per categoria

    ciao a tutti
    spero possiate aiutarmi

    io ho questa query:

    SELECT p.anteprima, p.Nome, p.Max_steam_pressure, tp.tipo_prod, p.Boiler_capacity, p.Detergent_tank_capacity, p.Refilling_water_tank_capacity_auto_refilling_system, p.id
                    FROM prodotti AS p, categoria AS c, prodcat AS pc, prodkind AS pk, tipo_prod AS tp
                     WHERE p.id = pc.idprod
                       AND p.id = pk.idprod
                       AND pc.idcat = c.id
                       AND pk.idtipo = tp.id
                       AND c.id = $idcat 
                       LIMIT $start, $display"
    ```  in cui selezione tutti i prodotti che appartengono ad una certa categoria, e seleziona anche il campo di utilizzo "tp.tipo_prod" che può variare da domestic, light-commercial, commercial, light-industrial, industrial...
    
    fino qua tutto ok e la query funziona esattamente
    solo che se io da pannello admin inserisco un prodotto e seleziono per esempio sia commercial che light-industrial, questo nella pagina di quella data categoria mi stampa due volte la riga del prodotto per ogni tipo
    
    vi metto uno screenshot in caso non mi sia spiegato troppo bene (cosa molto probabile)
    
    link: img178.imageshack.us/img178/7021/doppioprodkf1.jpg
    
    pensate vi sia un modo a livello di query per ottenere una riga sola del prodotto ma che in quella stessa riga stampi tutte le tipologie di utilizzo?
    
    ciauz a tutti e spero possiate aiutarmi

  • Consiglio Direttivo

    Ciao punkrazio
    A te interessa che l'inquiry porti fuori:

    Prova---------Categoria: commercial, light-industrial

    Se così potresti provare usando il GROUP BY p.anteprima
    oppure provare con un DISTINCT 'p.anteprima', e per far figurare a quali categorie appartiene provvedi con altre query...se c'è un altro modo....al momento mi sfugge :mmm:


  • User

    @Samyorn said:

    Ciao punkrazio
    A te interessa che l'inquiry porti fuori:

    Prova---------Categoria: commercial, light-industrial

    Se così potresti provare usando il GROUP BY p.anteprima
    oppure provare con un DISTINCT 'p.anteprima', e per far figurare a quali categorie appartiene provvedi con altre query...se c'è un altro modo....al momento mi sfugge :mmm:

    ciao intanto grazie per averci provato

    cmq si quello che vorrei ottenere è Categoria: commercial, light-industrial
    ho provato il group by anteprima ma non va in quanto cmq torna solo il primo valore di categoria che nell'esempio sarebbe commercial mentre light-industrial viene proprio snobbato alla grande
    solo che purtroppo non so come fare 😢😢😢😢

    non so se conviene incasinarsi con mysql (sempre che un modo esista) oppure provare a combinare qualkosa con php.
    non so più cosa fare, ho provato un po di tutto nelle mie limitate conoscienze

    help plz ❌x:x


  • Consiglio Direttivo

    Si, ti restituisco comunque uno solo dei valori, dicevo, per poter visualizzare tutte le categorie merceologiche, di provvedere a far un altra query per farle vedere 😉
    [php]$sql = "SELECT categoria FROM table WHERE anteprima='prova'";[/php]
    L'ho fatta semplificata per farti capire il concetto che volevo esprimere
    Il risultato di questa quer sarà Commercial e light-industrial...ed infine te li visualizzi 😉
    Spero possa esserti utile, se esiste un comando MySql che lo faccia in automatico...mi sa che non lo conosco 😉


  • User

    @Samyorn said:

    Si, ti restituisco comunque uno solo dei valori, dicevo, per poter visualizzare tutte le categorie merceologiche, di provvedere a far un altra query per farle vedere 😉
    [php]$sql = "SELECT categoria FROM table WHERE anteprima='prova'";[/php]L'ho fatta semplificata per farti capire il concetto che volevo esprimere
    Il risultato di questa quer sarà Commercial e light-industrial...ed infine te li visualizzi 😉
    Spero possa esserti utile, se esiste un comando MySql che lo faccia in automatico...mi sa che non lo conosco 😉

    mi sa che non ho capito che intendi 😄
    scusa
    cmq il mio sito ho cercato di farlo in maniera del tutto dinamica
    quindi se dovessi fare una query con un parametro predefinito mi spaccherebbe tutto il "dinamismo" (chiamiamolo così) per questo cercavo di non fare ne query ne niente altro in php predefinendo la richiesta su un qualkosa di particolare ma invece stando sempre sul generico
    non so se sn riuscito a spiegarmi :bho:


  • Consiglio Direttivo

    Beh, non fai altro che inserire dentro un ciclo un'altra query....se non è dinamica così :mmm:

    Per visualizzarti quei dati tu, penso, farai un ciclo che ti intabella i vari dati estratti, basterà inserire dentro l'ultima cella un altra query che ti estrae il valore di appartenenza categorie del parametro che "dinamicamente" sta effettuando quel ciclo 😉


  • User

    @Samyorn said:

    Beh, non fai altro che inserire dentro un ciclo un'altra query....se non è dinamica così :mmm:

    Per visualizzarti quei dati tu, penso, farai un ciclo che ti intabella i vari dati estratti, basterà inserire dentro l'ultima cella un altra query che ti estrae il valore di appartenenza categorie del parametro che "dinamicamente" sta effettuando quel ciclo 😉

    allora guarda dentro la funzione che uso ho il codice così

    
    $qproduct = "SELECT p.anteprima, p.Nome, p.Max_steam_pressure, tp.tipo_prod, p.Boiler_capacity, p.Detergent_tank_capacity, p.Refilling_water_tank_capacity_auto_refilling_system, p.id
                    FROM prodotti AS p, categoria AS c, prodcat AS pc, prodkind AS pk, tipo_prod AS tp
                     WHERE p.id = pc.idprod
                       AND p.id = pk.idprod
                       AND pc.idcat = c.id
                       AND pk.idtipo = tp.id
                       AND c.id = $idcat 
                       LIMIT $start, $display";
       
      $qproductsexe = mysql_query($qproduct) or die("Errore Home Message: " . mysql_error());
          
      while( $row = @mysql_fetch_assoc($qproductsexe) ) 
      {    
        $product_list .= implode("",file($template_dir."product_list.tpl"));
        $product_list = eregi_replace("<!-- ANTEPRIMA PRODOTTO -->", $row['anteprima'], $product_list);
        $product_list = eregi_replace("<!-- NOME PRODOTTO -->", $row['Nome'], $product_list);
        $product_list = eregi_replace("<!-- PRESSIONE -->", $row['Max_steam_pressure'], $product_list);
        $caratteristiche = "";
        if( $row['Boiler_capacity']!='' )
        {
          $caratteristiche .= "Boiler Capacity: ".$row['Boiler_capacity']."<br />";
        }
        $product_list = eregi_replace("<!-- CARATTERISTICHE PRODOTTO -->", $caratteristiche, $product_list);
        $product_list = eregi_replace("<!-- TIPO PRODOTTO -->", $row['tipo_prod'], $product_list);
        $product_list = eregi_replace("<!-- PRODOTTO ID -->", $row['id'], $product_list);
                        
      }
    
    

    poi va beh ritorno tutto alla chiamata di funzione
    cmq il mio codice è così, più o meno contorto :d


  • Consiglio Direttivo

    Whait 😄

    Con questo ok, ti visualizza solo una delle categorie ($row['tipo_prod'], credo sia questo)
    Se tu vuoi andare a visualizzare le categorie di appartenenza, così come per fare quella visualizzazione che hai fatto ad esempio:
    [php]<table>
    <?
    while ($row=mysql_fetch_assoc($qproductsexe))
    {
    echo "<tr>
    <td>".$row['anteprima']."</td>
    ......
    ......
    ......
    <td>";

       $sql = "SELECT tipo_prod FROM tabella_tipo_prodotti WHERE anteprima='$row['anteprima']";
       $query=mysql_query($sql);
       while ($tip=mysql_fetch_array($query))
       {
          echo $tip['tipo_prod']."</td></tr>";
        }
    

    }
    ?>
    </table>
    [/php]

    non badare alla forma, e' per farti capire che intendo 😉


  • User

    @Samyorn said:

    Whait 😄

    Con questo ok, ti visualizza solo una delle categorie ($row['tipo_prod'], credo sia questo)
    Se tu vuoi andare a visualizzare le categorie di appartenenza, così come per fare quella visualizzazione che hai fatto ad esempio:
    [php]<table>
    <?
    while ($row=mysql_fetch_assoc($qproductsexe))
    {
    echo "<tr>
    <td>".$row['anteprima']."</td>
    ......
    ......
    ......
    <td>";

       $sql = "SELECT tipo_prod FROM tabella_tipo_prodotti WHERE anteprima='$row['anteprima']";
       $query=mysql_query($sql);
       while ($tip=mysql_fetch_array($query))
       {
          echo $tip['tipo_prod']."</td></tr>";
        }
    

    }
    ?>
    </table>
    [/php]non badare alla forma, e' per farti capire che intendo 😉

    ok ho capito
    che intendi
    in sti giorni provo
    se non mi senti più è perchè ci sono riuscito :d


  • User

    nonostante tutto ho risolto in questo modo:

    [php]$qproduct = "SELECT p.id, p.anteprima, p.Nome, p.Max_steam_pressure, p.Boiler_capacity, p.Detergent_tank_capacity, p.Refilling_water_tank_capacity_auto_refilling_system, p.id
    FROM prodotti AS p, categoria AS c, prodcat AS pc
    WHERE p.id = pc.idprod
    AND pc.idcat = c.id
    AND c.id = $idcat
    LIMIT $start, $display";

    $qproductsexe = mysql_query($qproduct) or die("Errore Home Message: " . mysql_error());

    while( $row = @mysql_fetch_assoc($qproductsexe) )
    {
    $tipo = "";
    $qtipo = "SELECT tp.tipo_prod FROM tipo_prod AS tp, prodkind AS pk WHERE tp.id = pk.idtipo AND pk.idprod = '".$row['id']."'";
    $qtipoexe = mysql_query($qtipo);
    $contarisultato = @mysql_num_rows($qtipoexe);

      while($rowtipo = @mysql_fetch_assoc($qtipoexe) )
      { 
        if($contarisultato > 1)
        {      
          $tipo .= $rowtipo['tipo_prod']."<br />";
        }
        if($contarisultato == 1)
        {
          $tipo = $rowtipo['tipo_prod'];
        }
      }[/php]
    

    staccando le due query e facendone una a parte solo per la tipologia del prodotto

    grazie a tutti

    se in caso vi venisse in mente un metodo per fare tutto con una query fatemelo sapere ciauz