我希望有以下输出。
我想把名人和他们的照片放在数据库里。每个名人可能有不止一张照片。每一张照片可能有不止一个名人。
如果一个名人有一个以上的照片,我需要得到一个随机的照片与名人的名字。
我把桌子设计成这样。
名人表(名人):
id
name照片表(照片):
id
photo location名人和照片的连接表(Celebrity_Photos):
Celebrity id
Photos id但我不知道获得预期结果的正确查询。或者我可能把桌子设计错了。
给我建议一下最好的方法。
我知道连接查询。但我知道基本的联接查询。它给出了这样的信息。
celeb1 photo1
celeb1 photo2
celeb2 photo1但我希望你能
celeb1 photo2
celeb2 photo1或
celeb1 photo1
celeb2 photo1发布于 2013-01-26 15:49:24
照片中每个名人的id都是最低的:
SELECT
c.* -- columns you need from Celebrity
, p.* -- and Photo tables
FROM
celebrity AS c
LEFT JOIN
( SELECT celebrity_id
, MIN(photo_id) AS photo_id
FROM celebrity_photo
GROUP BY celebrity_id
) AS cp
ON cp.celebrity_id = c.celebrity_id
LEFT JOIN
photo AS p
ON p.photo_id = cp.photo_id ;每个名人的随机照片:
SELECT
c.* -- columns you need from Celebrity
, p.* -- and Photo tables
FROM
celebrity AS c
LEFT JOIN
photo AS p
ON p.photo_id =
( SELECT cp.photo_id
FROM celebrity_photo AS cp
WHERE cp.celebrity_id = c.celebrity_id
ORDER BY RAND()
LIMIT 1
) ;发布于 2013-01-26 15:44:53
我的方法:
[CELEB]
celeb_id
celeb_name
[CELEB_PHOTO]
celeb_photo_id
celeb_id
photo_name您的设计很好,如果在mo中没有大量的记录,我将从下面的查询开始:
SELECT * FROM `CELEB_PHOTO` WHERE `celeb_id` = $celeb_id ORDER BY RAND() LIMIT 1 然后,您可以通过查询名人表来获得该名人的姓名。
发布于 2013-01-26 15:46:26
用这个:
SELECT * FROM (SELECT RAND() RND_INDEX, P.PHOTO_ID, P.PHOTO_LOCATION, C.ID, C.NAME
FROM PHOTOS P, CELEBRITY_PHOTOS CP, CELEBRITY C
WHERE P.PHOTO_ID = CP.PHOTO_ID AND CP.ID = DESIRED_CELEBRITY AND CP.ID = C.ID) A ORDER BY RND_INDEX LIMIT 1https://stackoverflow.com/questions/14538458
复制相似问题