Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Query su due tabelle

  1. #1

    Query su due tabelle

    Salve ragazzi potete dirmi cosa non va in questa query?

    Codice PHP:
        case "getorderdetails" :
            
    $orderid = ($_POST['orders_id']);
            
    OutSql("select products_quantity as Quantita, final_price as Prezzo, 
    products_tax as Aliquota, products_model as CodiceProdotto, 
    products_options as TipoVariante1, 
    products_options_values as Variante1 
    from orders_products, orders_products_attributes WHERE orders_id = '
    $orderid'");
            break; 
    In pratica mi servono anche i valori products_options e products_options_values contenuti nella tabella orders_products_attributes.

    Dove sbaglio?

    Grazie

  2. #2
    sarebbe utile sapere qual'è il problema (non estrae nessun risultato, estrae male i valori, da errore la query e via dicendo)

    detto questo quale campo collega la tabella orders_products alla tabella orders_products_attributes o viceversa?

    In pratica dovresti fare una JOIN (LEFT JOIN se potrebbe non essere presente la riga corrispondente o INNER JOIN se deve essere SEMPRE presente una riga corrispondente) tra le due tabelle

    FROM
    orders_products AS op
    LEFT JOIN orders_products_attributes AS opa ON op.constraint1 = opa.constraint2

    Al posto della left puoi fare la inner ... constraint sta per è il campo comune
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    Puoi farmi un'esempio pratico?

    Grazie

  4. #4
    il codice che ti ho postato non ti piace? :master:

    a parte la prima parte della select che non cambia è tutto uguale

    la constraint come ti dicevo è una colonna che contiene i valori di riferimento

    mmm esempio pratico ... hai gli articoli in una tabella e le categorie di articoli in una seconda tabella e ogni articolo è associato ad una categoria: per effettuare le estrazioni devi usare una INNER JOIN (perché ogni articolo è SEMPRE associato ad una categoria) tipo

    codice:
    SELECT
      a.*, c.*
    
    FROM
      articoli AS a
      INNER JOIN categorie AS c ON a.categoria_id = c.id
    
    LIMIT
      0, 10
    Con la query di sopra estrai le informazioni delle categorie associate agli articoli

    Qui, nello specifico c'è una relazione 1 a 1, quindi per ogni articolo c'è una categoria e viceversa ... ma ad esempio per una relazione 1 a molti?

    Altro esempio, mettiamo che questi articoli abbiano dei TAG (sai cos'è una tag cloud?) associati agli articoli di cui parlavamo prima e ogni articolo oltre ad essere associato ad una categoria è anche associato a uno o più tag. Non voglio scendere nel merito perché ci sono mille mila modi di gestire i tag, questo è solo un esempio

    codice:
    SELECT
      a.*, c.*, t.*
    
    FROM
      articoli AS a
      INNER JOIN categorie AS c ON c.id = a.categoria_id
      LEFT JOIN articoli_to_tags AS att ON att.articolo_id = a.id
      LEFT JOIN tags AS t ON t.id = att.tag_id
    
    LIMIT
      0, 10
    Con il codice di sopra si va ad estrarre per ogni articolo anche l'elenco dei tag. Ovviamente quest'esempio non è esattamente il massimo perché IN OGNI RIGA avrai ANCHE tutti gli altri dati!

    Se hai un articolo con titolo "Primo Articolo" ed un contenuto XYZ questo verrà ripetuto, praticamente, per ogni tag!

    Se ad esempio il nostro articolo è associato al tag ABC, DEF, GHI allora avremo 3 righe con dentro
    Primo Articolo, XYZ, Prima Categoria, ABC
    Primo Articolo, XYZ, Prima Categoria, DEF
    Primo Articolo, XYZ, Prima Categoria, GHI

    (ovviamente dentro c'è anche altro, per semplificare ho scritto il minimo indispensabile)

    Detto tutto questo ti consiglio di leggere l'esauriente manuale di mysql a riguardo
    http://dev.mysql.com/doc/refman/5.1/en/select.html

    e di fare delle prove con le join
    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.