首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql表的设计

mysql表的设计
EN

Stack Overflow用户
提问于 2013-01-26 15:38:26
回答 6查看 125关注 0票数 0

我希望有以下输出。

我想把名人和他们的照片放在数据库里。每个名人可能有不止一张照片。每一张照片可能有不止一个名人。

如果一个名人有一个以上的照片,我需要得到一个随机的照片与名人的名字。

我把桌子设计成这样。

名人表(名人):

代码语言:javascript
复制
id 
name

照片表(照片):

代码语言:javascript
复制
id
photo location

名人和照片的连接表(Celebrity_Photos):

代码语言:javascript
复制
Celebrity id
Photos id

但我不知道获得预期结果的正确查询。或者我可能把桌子设计错了。

给我建议一下最好的方法。

我知道连接查询。但我知道基本的联接查询。它给出了这样的信息。

代码语言:javascript
复制
celeb1 photo1
celeb1 photo2
celeb2 photo1

但我希望你能

代码语言:javascript
复制
 celeb1 photo2
 celeb2 photo1

代码语言:javascript
复制
celeb1 photo1
celeb2 photo1
EN

回答 6

Stack Overflow用户

发布于 2013-01-26 15:49:24

照片中每个名人的id都是最低的:

代码语言:javascript
复制
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 ;

每个名人的随机照片:

代码语言:javascript
复制
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
        ) ;
票数 1
EN

Stack Overflow用户

发布于 2013-01-26 15:44:53

我的方法:

代码语言:javascript
复制
[CELEB]  
celeb_id
celeb_name  

[CELEB_PHOTO]  
celeb_photo_id
celeb_id
photo_name

您的设计很好,如果在mo中没有大量的记录,我将从下面的查询开始:

代码语言:javascript
复制
SELECT * FROM `CELEB_PHOTO` WHERE `celeb_id` = $celeb_id ORDER BY RAND() LIMIT 1 

然后,您可以通过查询名人表来获得该名人的姓名。

票数 0
EN

Stack Overflow用户

发布于 2013-01-26 15:46:26

用这个:

代码语言:javascript
复制
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 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14538458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档