[PHP] Consiglio su Qry/array

greghph27

Nuovo Utente
21 Giu 2017
14
0
1
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
 

marino51

Utente Attivo
28 Feb 2013
2.674
135
63
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
 

greghph27

Nuovo Utente
21 Giu 2017
14
0
1
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?
 

greghph27

Nuovo Utente
21 Giu 2017
14
0
1
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 ";