Первый запрос для выбранных учреждений, а второй - для получения последнего обзора в этом учреждении.
Первый запрос:
SELECT
instituteId,
instituteName,
description
FROM institutions
WHERE instituteId IN ('1','2','3')";
Второй запрос:
SELECT
name,
review,
timestamp
FROM reviews
WHERE instituteId='1'
ORDER BY timestamp DESC
LIMIT 1;
SELECT i.instituteId,
i.instituteName,
i.description ,
r.name,
r.review,
r.timestamp
FROM institutions i
INNER JOIN review r
ON i.instituteid = r.instituteId
INNER JOIN (SELECT instituteId,
MAX(timestamp) as timestamp
FROM reviews
GROUP BY instituteId
) r1
ON r.instituteid = r1.instituteId
AND r.timestamp = r1.timestamp
WHERE instituteId IN ('1','2','3')
Есть много способов сделать это. Но следующий дает мне лучшую производительность в большом наборе данных. И да, не забудьте индексировать столбцы.
SELECT i.instituteId,
i.instituteName,
i.description ,
r.name,
r.review,
r.timestamp
FROM institutions i
LEFT JOIN reviews r
ON i.instituteid = r.instituteId and r.timestamp=
(SELECT MAX(timestamp)
FROM reviews where reviews.instituteId = r.instituteId
)
WHERE instituteId IN ('1','2','3')
select i.instituteId, i.instituteName, i.description,
r.name,r.review, r.timestamp
from institutions i inner join reviews r on i.instituteId=r.instituteId
WHERE instituteId IN ('1','2','3')
ORDER BY timestamp DESC LIMIT 1
Вы можете присоединиться к двум таблицам в той точке, где обе таблицы соответствуют одному и тому же значению и свойству
Синтаксис: SELECT column_name (s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
Решение: SELECT i.instituteId, i.instituteName, i.description, v.name, v.review, v.timestamp FROM заведения я INNER JOIN отзывы v на i.instituteId = v.instituteId WHERE i.instituteId IN ('1', '2', '3') И v.instituteId = 1 ORDER BY v.timestamp DESC LIMIT 1;