Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    87

    [SQL]Domanda su query e join

    Ho fatto una ricerca sul forum e letto un pò qui e un pò li ma cmq non so come risolvere il mio problema.

    Allora ho 4 tabelle :

    MARCHE contenente i campi id, marca.
    CATEGORIE contenente i campi categoria_id, categoria, descrizione.
    SOTTOCATEGORIE contenente i campi sottocategoria_id, sottocategoria, categoria_id.
    PRODOTTI contenente i campi prodotto_id, categoria_id, sottocategoria_id, marca_id, prodotto.

    Volevo sapere c'è un modo, dato il prodotto_id, di ottenere con una sola query tutti i dati sul prodotto sostituendo direttamente i campi categoria_id e sottocategoria_id nella tabella PRODOTTI con i campi categoria e sottocategoria delle tabelle CATEGORIE e SOTTOCATEGORIE? Spero di essermi spiegato.

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    codice:
    "SELECT PRODOTTI.prodotto, MARCHE.marca,CATEGORIE.categoria,SOTTOCATEGORIE.sottocategoria FROM PRODOTTI
    INNER JOIN MARCHE ON MARCHE.id = PRODOTTI.marca_id
    INNER JOIN CATEGORIE ON CATEGORIE.categoria_id = PRODOTTI.categoria_id
    INNER JOIN SOTTOCATEGORIE ON SOTTOCATEGORIE.sottocategoria_id = PRODOTTI.sottocategoria_id
    WHERE prodotto_id = 1;"
    think simple think ringo

  3. #3
    grande marketto una domanda...ma nella calusa WHERE prodotto_id a quale tabella si riferisce?? non si dovrebbe specificarla?


  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    87
    Ti ringrazio sei grande.

    Domanda tecnica : io ho scelto questo metodo per evitare di fare più di una query per ottenere i risultati che cercavo e appesantire il carico sul db. Con le join vado giusto? O ci sono anche altri metodi più leggeri?

  5. #5
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Originariamente inviato da dinucciarturo
    grande marketto una domanda...ma nella calusa WHERE prodotto_id a quale tabella si riferisce?? non si dovrebbe specificarla?

    si, bisogna specificare il riferimento alla tabella prodotti.
    think simple think ringo

  6. #6
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Originariamente inviato da Joypsick
    Ti ringrazio sei grande.

    Domanda tecnica : io ho scelto questo metodo per evitare di fare più di una query per ottenere i risultati che cercavo e appesantire il carico sul db. Con le join vado giusto? O ci sono anche altri metodi più leggeri?

    dipende sempre dal numero di richieste che hai verso il tuo db, purtroppo nn so dirti se esistano sistemi più smelli per fare qst tipo di operazione...
    think simple think ringo

  7. #7
    Utente di HTML.it L'avatar di aserena
    Registrato dal
    Feb 2003
    Messaggi
    310
    Originariamente inviato da Joypsick
    io ho scelto questo metodo per evitare di fare più di una query per ottenere i risultati che cercavo e appesantire il carico sul db. Con le join vado giusto? O ci sono anche altri metodi più leggeri?
    Stai attento... le join sono un'arma a doppio taglio: quando fai una join il sistema fa il prodotto cartesiano delle tabelle che incroci, il che si traduce in una tabella finale che può essere molto grande se unisci tante tabelle....

    ciao ^^
    La (!) è quella roba che in autunno si intristisce... perche': seccano i piselli, migrano gli uccelli, cadono i marroni, e se poi c'è anche la nebbia non si vede più un caXXo!! by Piero.mac @07/05

  8. #8
    Dipende quante colonne estrapola dalle singole tabelle...
    Marco Bianucci
    marco@phoenixweb.it
    Hosting php
    Programmazione & WebDesign

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    87
    Quindi non è detto che questo sistema sia più rapido di :

    Codice PHP:
    $query_categoria "SELECT * FROM " $table_categorie " ORDER BY categoria";

    $result_categoria mysql_query($query_categoria);
    $num_rows_categoria mysql_num_rows($result_categoria);
        for(
    $i 0$i $num_rows_categoria$i++)
        { 
    $rowcategoria mysql_fetch_array($result_categoria);
          
    $return .= "[b]" $rowcategoria['categoria'] . "(" $rowcategoria['categoria_id'] . ")" "
    [/b]"
    ;
          
    $query_sottocategoria "SELECT * FROM " $table_sottocat " WHERE categoria_id='" $rowcategoria['categoria_id'] . "' ORDER BY sottocat";
          
    $result_sottocategoria mysql_query($query_sottocategoria);
          
    $num_rows_sottocategoria mysql_num_rows($result_sottocategoria);
          for(
    $l 0$l $num_rows_sottocategoria$l++)
          { 
    $rowsottocategoria mysql_fetch_array($result_sottocategoria);
              
    $return .= "[i]" $rowsottocategoria['sottocat'] . "(" $rowsottocategoria['sottocat_id'] . ")" "
    [/i]"
    ;
            
    $query_marca "SELECT * FROM " $table_marche;
            
    $result_marca mysql_query($query_marca);
            
    $num_rows_marca mysql_num_rows($result_marca);
            for(
    $k 0$k $num_rows_marca$k++)
            { 
    $rowmarca mysql_fetch_array($result_marca);
              
    $query_prodotto "SELECT * FROM " $table_prodotti " WHERE sottocat_id='" $rowsottocategoria['sottocat_id'] . "' AND marca_id='" $rowmarca['marca_id'] . "'";
              
    $result_prodotto mysql_query($query_prodotto);
              
    $num_rows_prodotto mysql_num_rows($result_prodotto);
              if(
    $num_rows_prodotto != 0){
              
    $return .= "[b][i]" $rowmarca['marca'] . "[/i][/b][i][/i]
    "
    ;
              for(
    $j 0$j $num_rows_prodotto$j++)
              { 
    $rowprodotto mysql_fetch_array($result_prodotto);
                
    $return .= "" $rowprodotto['prodotto'] . "(" $rowprodotto['prodotto_id'] . ")" "
    "
    ;
                }  
            }
        }
    }

    O sbaglio? Ci sono altri metodi ancora per eseguire queste operazioni?

    Grazie delle info!!

  10. #10
    Secondo me se il join c'è, è perchè serve..
    Se il db ha due tabelle forse vale la pena di considerare altre alternative, ma se ne ha 1000 (so che non è il caso di Joypsick)...
    E' vero che è un'operazione pesantissima, ma sicuramente gli eroi di mysql l'avranno implementato in modo da renderlo meno pesante di una serie di select "annidate"!
    Poi esiste in ogni caso la versione ridotta (left o right join) che - almeno concettualemente - semplifica la vita..

    ciao
    ..povero silvio, lui è sceso in campo..
    e lo ha fatto per noi...comunisti...

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.