Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [mysql] posizionamento articolo particolare

    Buon dì

    Mi è capitato di dover lavorare su un db non tanto complesso ma abbastanza articolato.

    Questo db dovrebbe restituire delle informazioni in base alla lingua scelta.

    Per ogni lingua (es. ITA, ENG, ESP) potrebbero esserci più paesi associati (es. ESP può essere sia Spagna che Argentina) ed in base al paese scelto dovrebbero mostrarsi dei prodotti.

    Ogni prodotto può essere disponibile sia per un paese che per un altro e per ogni lingua scelta può avere una descrizione dedicata (ITA in italiano, ESP in spagnolo).

    Prodotto pippo
    disponibile sia per l'italia che per la spagna, non per l'argentina

    si entra scegliendo l'argentina, pippo non è presente, si entra scegliendo la spagna, sito sempre in spagnolo ma con pippo presente. Si entra scegliendo l'italia, sito in italiano, pippo presente in italiano.

    Fin qui, sebbene sia già abbastanza "irritante" da gestire, se non altro per linearità di relazioni, non ci sono problemi ... mentre ce ne sono per gestire il posizionamento di pippo.

    Mettiamo caso che in italia pippo debba essere mostrato al primo posto, mentre in spagna al secondo.

    pippo quindi deve essere:
    - slegato dalla lingua (se non c'è la descrizione in lingua corrispondente al paese si mostra quella del paese di default, esempio inglese)
    - slegato dal paese (può essere mostrato in uno o più paesi ma non in uno o altri paesi)
    - legato alla posizione per quel paese, se presente, slegato per posizione, nei vari paesi


    io penso di aver trovato una soluzione ma non ne sono del tutto convinto, voi come strutturereste questo insieme di relazioni ?


    Grazie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  2. #2
    forse è meglio postare un pò di tabelle

    codice:
    // tabella prodotto
    CREATE TABLE product (
      pr_id int(10) unsigned NOT NULL,
      pr_d_id int(10) unsigned NOT NULL,
      pr_name varchar(100) binary NOT NULL,
      PRIMARY KEY  (pr_id)
    ) TYPE=MyISAM;
    
    // tabella paese
    CREATE TABLE product_country (
      prc_id int(10) unsigned NOT NULL,
      prc_pr_id int(10) unsigned NOT NULL,
      prc_country_id int(10) unsigned NOT NULL,
      PRIMARY KEY  (prc_id)
    ) TYPE=MyISAM;
    
    // tabella lingue
    CREATE TABLE languages (
      l_id int(10) unsigned NOT NULL,
      l_lang char(3) binary NOT NULL,
      l_fulllang varchar(100) binary default NULL,
      l_global tinyint(1) unsigned NOT NULL default '0',
      PRIMARY KEY  (l_id)
    ) TYPE=MyISAM;
    
    // tabella posizioni
    CREATE TABLE product_position (
      prp_id int(10) unsigned NOT NULL,
      prp_pr_id int(10) unsigned NOT NULL,
      prp_country_id int(10) unsigned NOT NULL default '0',
      prp_pos int(10) unsigned NOT NULL,
      PRIMARY KEY  (prp_id)
    ) TYPE=MyISAM;

    per trovare le posizioni in base al paese, sapendo la lingua:
    SELECT prp_id, prp_pos FROM product_position LEFT JOIN ip2c__country ON country_id = prp_country_id WHERE country_l_id = {$lingua}
    giusta ?



    come potrei avere una lista prodotti a prescindere che il posizionamento sia stato assegnato o meno ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    ci sono molte più operazioni di select piuttosto che di modifica o aggiunte vero?

  4. #4
    ho capito male o le posizioni sono un attributo dei paesi?
    cioè per un prodotto ed un paese corrisponde una posizione e basta...giusto?

  5. #5
    un prodotto può avere o non avere una posizione in base al paese ... ogni paese può avere una lista di prodotti da mostrare diversa da altri paesi ... l'errore era sulla lista in base alla lingua, mentre le associazioni dei prodotti sono in base ai paesi ... quindi, teoricamente, con questa dovrei aver risolto:

    SELECT pr_id, pr_name, prp_pos FROM product LEFT JOIN product_country ON prc_pr_id = pr_id LEFT JOIN product_position ON prp_country_id = prc_country_id WHERE prc_country_id = '.$country.' ORDER BY prp_pos ASC, pr_name ASC


    se il paese ha una posizione sta in cima alla lista, altrimenti sta in fondo accodato in ordine alfabetico ... ora devo fare uno schema per prendere l'id del prodotto e cambiargli a piacere la posizione ma prima vorrei essere sicuro che questa query sia quella giusta

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.