[PHP] Consiglio su Qry/array

Discussione in 'PHP' iniziata da greghph27, 13 Ottobre 2017 alle 13:51.

  1. greghph27

    greghph27 Nuovo Utente

    Registrato:
    21 Giugno 2017
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao a tutti
    chi mi sa consigliare "la via da prendere", possibilmente la piu veloce in termini di richiesta/risposta client/server.
    La mia situazione è questa:

    ho tre tabelle
    -tabella articoli
    --codice
    --idimmagine1 (Integer collegato ad id tabella immagini)
    --idimmagine2 (Integer collegato ad id tabella immagini)
    --idimmagine3 (Integer collegato ad id tabella immagini)
    --iddimensione (Integer collegato ad id tabella dimensioni)

    - tabella immagini
    -- id
    --immagine

    - tabella dimensioni
    --id
    --dimensione

    la mia necessita è di ottenere una tabella con visualizzati i seguenti dati
    Codice Immagine Immagine Immagine Dimensione

    cosa mi consgiliate di fare?
    Usare Union nella stringa SQL o, avevo pensato, di crearmi prima due array contenenti il primo id ed immagine della tabella immagini e il secondo id e dimensione della tabella dimensioni e quando ciclo la tabella articoli lego i vari idimmagine all'array corrispondente ed espongo il valore che mi serve.
    Su quest'ultima chi potrebbe spiegarmi come fare?
    grazie
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    1.802
    Mi Piace Ricevuti:
    67
    Punteggio:
    48
    Occupazione:
    free lance
    Località:
    Lombardia
    potresti provare con questa query che restituisce quello che chiedi,
    Codice:
    select
     a.codice
    ,i1.immagine as immagine1
    ,i2.immagine as immagine2
    ,i3.immagine as immagine3
    ,d.dimensione
    from articoli a
        ,immagini i1
        ,immagini i2
        ,immagini i3
        ,dimensioni d
    where i1.id = a.idimmagine1
      and i2.id = a.idimmagine2
      and i3.id = a.idimmagine3
      and d.id = a.iddimensione
    
      and a.codice between 31 and 40
    
    order by a.codice
    ho inserito "between" e "order by" come esempio nel caso fossero utili

    MA... questa query estrae gli articoli che hanno le 3 immagini e la dimensione presenti nelle rispettive tabelle,
    nel caso un id non sia trovato, l'articolo non viene estratto

    se dovesse esistere questa possibilità (che non accenni nella tua richiesta), occorre usare le join con lo stesso principio
     
  3. greghph27

    greghph27 Nuovo Utente

    Registrato:
    21 Giugno 2017
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    Ciao Marino51
    effettivamente mi son dimenticato di scrivere che se non è presente l'id in relazione con le tabelle, lo stesso deve essere esposto
    ho provato cosi...ma mi estrae piu righe di quante ci siano in tabella (9035)
    PHP:
    $query="SELECT A.*, B.formato AS formatop, C.formato AS formatopm, D.nomefile AS logoclasse, E.nomefile AS logoinf, ";
    $query .="F.nomefile AS logoce, G.nomefile AS logoimq, H.nomefile AS logoenec, I.nomefile AS logoecolight, ";
    $query .= "L.nomefile AS logoet, M.nomefile AS logovarie ";
    $query .="FROM items AS A ";
    $query .="INNER JOIN formato_etichette AS B ON B.cf_id=A.ksformato ";
    $query .="INNER JOIN formato_etichette AS C ON C.cf_id=A.ksformatomaster ";
    $query .="INNER JOIN loghi AS D ON D.cf_id=A.classe ";
    $query .="INNER JOIN loghi AS E ON E.cf_id=A.infiammabile ";
    $query .="INNER JOIN loghi AS F ON F.cf_id=A.ce ";
    $query .="INNER JOIN loghi AS G ON G.cf_id=A.imq ";
    $query .="INNER JOIN loghi AS H ON H.cf_id=A.enec ";
    $query .="INNER JOIN loghi AS I ON I.cf_id=A.ecolight ";
    $query .="INNER JOIN loghi AS L ON L.cf_id=A.et ";
    $query .="INNER JOIN loghi AS M ON D.cf_id=A.varie ";
    risultato = 12.308 righe anziche 9035
    nei campi della tab items, se non è collegato a nennun id delle altre due tabelle, il valore è 0

    ho provato anche con LEFT JOIN e mi da 55.385 valori
    dove sbaglio?
     
  4. greghph27

    greghph27 Nuovo Utente

    Registrato:
    21 Giugno 2017
    Messaggi:
    11
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    ciao ho risolto nidificando le inner join
    PHP:
    $query="SELECT A.*, B.formato AS formatop, C.formato AS formatopm, D.nomefile AS logoclasse, E.nomefile AS logoinf,
    F.nomefile AS logoce, G.nomefile AS logoimq, H.nomefile AS logoenec, I.nomefile AS logoecolight, L.nomefile AS logoet, M.nomefile AS logovarie
    FROM loghi AS M INNER JOIN (loghi AS L INNER JOIN (loghi AS I INNER JOIN (loghi AS H
    INNER JOIN (loghi AS G INNER JOIN (loghi AS F INNER JOIN (loghi AS E INNER JOIN (loghi AS D
    INNER JOIN (formato_etichette AS C INNER JOIN (formato_etichette AS B INNER JOIN items AS A ON B.cf_id = A.ksformato)
    ON C.cf_id = A.ksformatomaster) ON D.cf_id = A.classe) ON E.cf_id = A.infiammabile) ON F.cf_id = A.ce) ON G.cf_id = A.imq) ON H.cf_id = A.enec)
    ON I.cf_id = A.ecolight) ON L.cf_id = A.et) ON M.cf_id = A.varie "
    ;
     
Sto caricando...

Condividi questa Pagina