У меня есть главный стол, tbl_vluchtgegevens, который является "главной" таблицей, на которую я смотрю. Из этого я хочу присоединиться к tbl_photos и показать "случайный" результат из этой таблицы.
Моя проблема в том, что в tbl_vluchtgegevens есть только одно значение столбца, которое будет равно значению столбца в tbl_photos, однако есть второй столбец, который хранится в tbl_photos, который похож на второй столбец в tbl_vluchtgevevens, который ему нужно посмотреть. Существует 3-я таблица, где значение в tbl_photos будет иметь значение для tbl_vluchtgegevens, tbl_luchtvaartmaatschappij
Я просто не могу понять код MySQL для MariaDB. Я попытаюсь показать это ниже.
tbl_vluchtgegevens | tbl_luchtvaartmaatschappij | tbl_photos
luchtvaartmaatschappij luchtvaartmaatschappij
IATACode img_lvm
inschrijvingnmr img_nmr
ПРИМЕР ДАННЫХ:
tbl_vluchtgegevens
gegevenID | luchtvaartmaatschappij | inschrijvingnmr | vertrekdatum2
1 911 N803NW 2018-01-01 12:00:00
2 1702 PH-AON 2018-01-15 17:00:00
3 911 N853NW 2018-01-17 11:00:00
tbl_luchtvaartmaatschappij
luchtvaartmaatschappijID | IATACode
911 DL
1702 KL
1803 LH
tbl_photos
photoID | img_lvm | img_nmr | file
1 DL N853NW somefile.jpg
2 DL N803NW somefile2.jpg
3 DL N853NW somefile3.jpg
4 KL PH-AON somefile4.jpg
5 KL PH-AON somefile5.jpg
6 LH D-AUBC somefile6.jpg
7 DL N805NW somefile7.jpg
Запрос приведет к:
gegevenID | vertrekdatum2 | luchtvaartmaatschappij | inschrijvingnmr | file
1 2018-01-15 12:00:00 911 N803NW somefile.jpg
2 2018-01-15 17:00:00 1702 PH-AON somefile4.jpg
3 2018-01-17 11:00:00 911 N853NW somefile3.jpg
sqlfiddle: http://www.sqlfiddle.com/#!9/19e222/1
В какой-то момент я попытался использовать код ниже, но если в tbl_photos существует несколько строк, то он отображает каждую строку из tbl_vluchtgegevens со всеми строками в tbl_photos.
SELECT DISTINCT vg.gegevenID, vg.vertrekdatum2, vg.inschrijvingnmr, lvm.luchtvaartmaatschappij, lvm.luchtvaartmaatschappijID, p.*
FROM tbl_vluchtgegevens vg
LEFT JOIN tbl_luchtvaartmaatschappij lvm
ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID
LEFT JOIN tbl_photos p
ON lvm.IATACode = p.img_lvm
AND vg.inschrijvingnmr = p.img_nmr
WHERE vg.vertrekdatum2 <=NOW()
ORDER BY vg.vertrekdatum2 DESC
Я тоже пытался сделать подзапрос, но я только сделал один, и я не могу заставить это работать независимо от того, как я переработаю код.
SELECT vg.gegevenID, vg.vertrekdatum2, vg.inschrijvingnmr, lvm.luchtvaartmaatschappij, lvm.luchtvaartmaatschappijID, p.*
FROM tbl_vluchtgegevens vg
LEFT JOIN tbl_luchtvaartmaatschappij lvm
ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID
( SELECT p.*, lvm.IATACode, lvm.luchtvaartmaatschappijID
FROM tbl_photos p
LEFT JOIN tbl_luchtvaartmaatschappij lvm
ON vg.luchtvaartmaatschappij = lvm.luchtvaartmaatschappijID
ORDER BY RAND()
LIMIT 1 ) pho
WHERE vg.vertrekdatum2 <=NOW() AND vg.luchtvaartmaatschappij = pho.luchtvaartnamatschappij AND vg.inschrijvingnmr = pho.img_nmr
ORDER BY vg.vertrekdatum2 DESC
Один из способов сделать это с помощью связанного с подзапросом
запрос
SELECT
tbl_vluchtgegevens.gegevenID
, tbl_vluchtgegevens.vertrekdatum2
, tbl_vluchtgegevens.luchtvaartmaatschappij
, tbl_vluchtgegevens.inschrijvingnmr
, (
SELECT
tbl_photos.file
FROM
tbl_photos
WHERE
tbl_photos.img_nmr = tbl_vluchtgegevens.inschrijvingnmr
ORDER BY
RAND()
LIMIT 1
) AS 'file'
FROM
tbl_vluchtgegevens
WHERE
tbl_vluchtgegevens.vertrekdatum2 <=NOW()
ORDER BY
tbl_vluchtgegevens.vertrekdatum2 DESC
Один возможный результат
| gegevenID | vertrekdatum2 | luchtvaartmaatschappij | inschrijvingnmr | file |
|-----------|----------------------|------------------------|-----------------|---------------|
| 2 | 2018-01-01T17:00:00Z | 1702 | PH-AON | somefile5.jpg |
| 1 | 2018-01-01T12:00:00Z | 911 | N803NW | somefile2.jpg |
| 4 | 2017-03-01T17:00:00Z | 911 | N809NW | (null) |
| 3 | 2017-01-17T11:00:00Z | 911 | N853NW | somefile7.jpg |
| 4 | 2016-03-01T17:00:00Z | 1702 | PH-AON | somefile3.jpg |