Estrazione di più risultati da tabelle correlate

  • Creatore Discussione Creatore Discussione Kiko74b
  • Data di inizio Data di inizio

Kiko74b

Nuovo Utente
26 Giu 2022
19
2
3
Salve a tutti ho creato queste tre tabelle :
CREATE TABLE `tblbooks` (
`id` int(11) NOT NULL,
`BookName` varchar(255) DEFAULT NULL,
`CatId` int(11) DEFAULT NULL,
`CompId` int(11) DEFAULT NULL,
`AuthorId` int(11) DEFAULT NULL,
`ISBNNumber` varchar(25) DEFAULT NULL,
`EAN` varchar(13) DEFAULT NULL,
`BookPrice` smallint(4) DEFAULT NULL,
`ProductScad` date DEFAULT NULL,
`bookImage` varchar(250) NOT NULL,
`isIssued` int(1) DEFAULT NULL,
`RegDate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`UpdationDate` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `tbldiabetici` (
`id` int(11) NOT NULL,
`CognomeNome` varchar(255) NOT NULL,
`CodFiscale` varchar(16) NOT NULL,
`CodVerifica` varchar(3) NOT NULL,
`PianoTerapeutico` date NOT NULL,
`StatoErogazione` tinyint(1) NOT NULL,
`DataCreazione` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `tblerogazioni` (
`id` int(11) NOT NULL,
`Iddiabetico` int(11) NOT NULL,
`DataErogazione` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`ProductId1` int(11) DEFAULT NULL,
`ProductId2` int(11) DEFAULT NULL,
`ProductId3` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

devo fare una query per estrapolare cosa viene erogato ed n nche data per ogni diabetico.
Sono fermo a questo punto :
PHP:
SELECT tblerogazioni.DataErogazione, tbldiabetici.CognomeNome, tblbooks.BookName FROM ((tblerogazioni 
INNER JOIN tbldiabetici ON tblerogazioni.Iddiabetico = tbldiabetici.id)
INNER JOIN tblbooks ON tblerogazioni.ProductId1 = tblbooks.id);
Cosi facendo ottengo solo 1 prodotto dalla query...
Come dovrei fare per ottenere i tre prodotti?
 
codice.JPG
 
così puoi ottenere la lista elencando i tre prodotti salvo clausole where che filtrano

SQL:
select * from (
SELECT id, Iddiabetico, DataErogazione, ProductId1 as ProductId FROM tblerogazioni
UNION ALL
SELECT id, Iddiabetico, DataErogazione, ProductId2 as ProductId FROM tblerogazioni
UNION ALL
SELECT id, Iddiabetico, DataErogazione, ProductId3 as ProductId FROM tblerogazioni
) t
where .....
left join .....
left join .....
order by ....

ps, non dimenticare la t dopo la parentesi chiusa
 
Sera preziosissimo Marino la query che mi hai inviato funziona alla grande. Volevo chiederti pero una cosa avendo i tre prodotti id diversi ho notato che quando richiamo il risultato dell'unione dei tre prodotti mi vengono stampati indicizzati secondo l'id del prodotto. Vorrei che mi vengano stampati a video proprio nell'ordine 1,2,3. Spero di essere stato chiaro
es. se prodotto1 ha id 12
prodotto 2 ha id 10
e prodotto3 ha id 17
facendo l'unione e richiamando il risultato questi escono in questa sequenza:
prodotto2, prodotto1 , prodotto3
Esiste qualche modo per ottenere il risultato con la sequenza 1,2,3?
 
se ho capito, puoi provare così
SQL:
SELECT 1 as ordine, id, Iddiabetico, DataErogazione, ProductId1 as ProductId FROM tblerogazioni
UNION ALL
SELECT 2 as ordine, id, Iddiabetico, DataErogazione, ProductId2 as ProductId FROM tblerogazioni
UNION ALL
SELECT 3 as ordine, id, Iddiabetico, DataErogazione, ProductId3 as ProductId FROM tblerogazioni
....
order by Iddiabetico, DataErogazione, ordine
aggiustando "order by" secondo necessità
 

Discussioni simili