0

table1 > ギャラリー | それぞれが個別の ID で識別されます

table2 > 画像 | ギャラリー内の画像

table3 > 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'

これらを単一のクエリに結合するにはどうすればよいですか?

4

2 に答える 2

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
)
于 2013-07-30T18:11:45.460 に答える
0

結合を介してテーブルをリンクできます。私は t-sql ほど mysql に精通していませんが、少なくとも次の方法で理解できるはずです。

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

あなたの投稿をさらに見ると、それぞれに 1 つのランダムな画像を含む 10 個のギャラリーを取得したいように見えるため、相関サブクエリが必要になる場合があります。

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
于 2013-07-30T18:13:58.230 に答える