2013-07-30 2 views
0

table1> галереи | каждый из которых идентифицируется отдельным идентификаторомJOIN из второй таблицы на основе случайной записи с третьего

table2> изображения | изображения в галерее

стол3> galImgLink | каждая запись связывает изображение в галерею

select 
    galId, 
    galName 
from 
    galleries 
limit 
    0, 10 

присоединиться изображением для каждой записи выбранной выше, выбрав случайную запись из таблицы ссылок

select 
    lnkImgId 
from 
    galImgLink 
where 
    lnkGalId = galId 
ORDER BY 
    RAND() 
LIMIT 
    0, 1 

, а затем извлечения взаимосвязанного изображения из таблицы изображений

select 
    imgFile, 
    imgTitle 
from 
    Images 
where 
    imgId = lnkImgId and 
    imgStatus = 'active' 

Как объединить их в один запрос?

ответ

0

Я считаю, что-то вроде следующего будет работать:

SELECT galleries.galId, galleries.galName, Images.imgFile 
FROM galleries 
JOIN Images 
ON Images.imgId = (
    SELECT lnkImgId 
    FROM galImgLink 
    WHERE lnkGalId = galleries.galId 
    ORDER BY RAND() 
    LIMIT 1 
) 
0

Вы можете связать таблицы с помощью соединения. Я не так хорошо знаком с mysql, как с t-sql, но следующее должно по крайней мере приблизиться к вам.

select Images.imgFile, galImgLink.lnkImgId, galleries.galId, galleries.galName 
from Images 
inner join galImgLink on Images.imgId = galImgLink.lnkImgId 
inner join galleries on galImgLink.linkGalId = galleries.galId 
limit 0, 10 

Заглядывая на своем посту, он выглядит, как вы хотите, чтобы захватить 10 галерей с 1 случайных изображений для каждого, так что вам может понадобиться связанный подзапрос:

select galleries.galId, galleries.galName, 
(
select Images.imgFile 
from Images 
inner join galImgLink on Images.imgId = galImgLink.lnkImageId 
where galImgLink.galId = galleries.galId 
order by rand() 
limit 0, 1 
) as imgFile 
from galleries 
limit 0, 10 
Смежные вопросы