Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Query con join, help

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617

    Query con join, help

    Salve, scopiazzo il testo pari pari dalla sezione php dove avevo erroneamente postato.

    Stò cercando di fare una query utilizzando join per recuperare più dati incrociati tra loro.

    Premetto che con le join c'ho capito sempre ben poco ( se conoscete una guida facile facile vi prego di darmela ). Il problema mi sorge quando arrivato ad aggiungere una tabella alla query questa mi tira fuori più di un solo risultato mentre a me servirebbe solo quello che in una determinata colonna contiene il numero più alto, di seguito il codice per cercare di farvi capire meglio:

    codice:
    
    
    codice:
    $sql="SELECT *, p.price FROM "._DB_PREFIX_."product p";
    $sql.=" LEFT JOIN "._DB_PREFIX_."product_lang pl ON(p.id_product = pl.id_product) ";
    $sql.=" LEFT JOIN "._DB_PREFIX_."tax t ON(p.id_tax_rules_group = t.id_tax)";
    $sql.=" LEFT JOIN "._DB_PREFIX_."specific_price sp ON(p.id_product = sp.id_product)";
    $sql.=" LEFT JOIN "._DB_PREFIX_."stock_available sa ON(p.id_product = sa.id_product)";
    $sql.=" WHERE p.active = '1' AND sa.quantity > '0'";
    $sql.=" ORDER BY p.date_add DESC, p.id_product DESC LIMIT $limit $offset";


    In pratica arrivati a stock_available mi tira fuori più di un risultato io vorrei che oltre a prendermi i record dove p.id_product = sa.id_product mi prendesse anche quello che fra quei risultati ha "quantity" più alta di tutti.

    Possibile? Come potrei porcedere?

    Grazie in anticipo!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    scusa, ma forse c'e' un poco di confisione in questa query che hai postoto, o forse io oggi non connetto:

    scrivendo una left join del genere "portresti ottenere" piu record di risultati...

    $sql.=" LEFT JOIN "._DB_PREFIX_."stock_available sa ON(p.id_product = sa.id_product)";...

    in protica ci possono essere più record della tabella stock_available con lo stesso id_product.

    cerca di chiarire meglio che dataresoult vuoi ottenere.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Bhe è proprio quello il problema,in stock_available ci sono effettivamente più record con p.id_product = sa.id_product ma l'id product è l'unico che posso usare per associare la tabella precedente con stock_available. Di fatto però a me serve un'unico record, quello che, in stock_available ha "quantity" più alta di tutti.

    Ho risolto così:

    codice:
    
    
    codice:
    $sql= "SELECT *, p.price FROM "._DB_PREFIX_."product p";
    $sql.= " LEFT JOIN "._DB_PREFIX_."product_lang pl ON(p.id_product = pl.id_product) ";
    $sql.= " LEFT JOIN "._DB_PREFIX_."tax t ON(p.id_tax_rules_group = t.id_tax)";
    $sql.= " LEFT JOIN "._DB_PREFIX_."specific_price sp ON(p.id_product = sp.id_product)";
    $sql.= " LEFT JOIN (SELECT* FROM "._DB_PREFIX_."stock_available GROUP BY id_product) as sa ON(p.id_product = sa.id_product)";
    $sql.= " WHERE p.active = '1' AND sa.quantity > '0'";
    $sql.= " ORDER BY p.date_add DESC, p.id_product DESC LIMIT $limit $offset";


    Mi pare che funzioni correttamente ma vorrei un parere, come detto sono un bel po' niubbo sulle join.

    Grazie in anticipo

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Madsex Visualizza il messaggio
    Bhe è proprio quello il problema,in stock_available ci sono effettivamente più record con p.id_product = sa.id_product ma l'id product è l'unico che posso usare per associare la tabella precedente con stock_available. Di fatto però a me serve un'unico record, quello che, in stock_available ha "quantity" più alta di tutti.

    Ho risolto così:

    codice:
    
    
    codice:
    $sql= "SELECT *, p.price FROM "._DB_PREFIX_."product p";
    $sql.= " LEFT JOIN "._DB_PREFIX_."product_lang pl ON(p.id_product = pl.id_product) ";
    $sql.= " LEFT JOIN "._DB_PREFIX_."tax t ON(p.id_tax_rules_group = t.id_tax)";
    $sql.= " LEFT JOIN "._DB_PREFIX_."specific_price sp ON(p.id_product = sp.id_product)";
    $sql.= " LEFT JOIN (SELECT* FROM "._DB_PREFIX_."stock_available GROUP BY id_product) as sa ON(p.id_product = sa.id_product)";
    $sql.= " WHERE p.active = '1' AND sa.quantity > '0'";
    $sql.= " ORDER BY p.date_add DESC, p.id_product DESC LIMIT $limit $offset";


    Mi pare che funzioni correttamente ma vorrei un parere, come detto sono un bel po' niubbo sulle join.

    Grazie in anticipo
    onestamente avrei qualche perplessita' sul corretto funzionamento....ma se tu hai testato, allora è ok. Tuttavia io proverei qualcosa del genere

    ....
    LEFT JOIN (SELECT * FROM "._DB_PREFIX_."stock_available where stock_available.id_product=p.id_product order by stock_available.quantity asc LIMIT 1) as sa ON (1=1)
    ....

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.