首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在sql中选择可能的行

如何在sql中选择可能的行
EN

Stack Overflow用户
提问于 2013-12-29 18:54:42
回答 1查看 93关注 0票数 0

好吧,这就是我的情况:

我有两个桌子:照片图片库。我只想展示所有画廊的一张照片,但我在照片(表)列title_photo。

我想展示这个图像,它有title_photo='y‘,当然,其他画廊的一些图像没有它(它们有title_photo = 'n')。我有这个sql

代码语言:javascript
复制
SELECT * FROM photos
RIGHT JOIN gallery
ON gallery.code = photos.gallery_code
WHERE photos.title_photo = 'y' 
GROUP BY gallery.id

我有4个画廊,只有一个我设置在第一行(photos TABLE) title_photo = 'y'。该sql只显示一个库,它包含在photos(TABLE) set title_photo = 'y'中。

我的问题是:

是否有任何解决方案来展示其他画廊(他们有photos.title_photo = 'n')和有title_photo = 'y'的展示画廊

EN

回答 1

Stack Overflow用户

发布于 2013-12-29 19:46:30

在每个图片库中,您似乎都希望获得“第一张”照片,其中"first“是由title_photo中的'y‘值定义的,如果该值存在的话。如果画廊没有标题照片,我们将使用该图片库中最小的photo.id作为“第一”。

首先,我们需要在每个画廊中找到“第一张”照片的伪id。让我们试试这个:

代码语言:javascript
复制
   SELECT photos.gallery_code,
          MIN(photos.id + (100000000 * photos.title_photo <> 'y')) AS pseudoid
     FROM photos
 GROUP BY photos.gallery_code

这给我们提供了一个真正的photos.id,或者为每个画廊提供一亿个太大的photos.id。接下来,我们需要将其转换回可用的照片id,如下所示。

代码语言:javascript
复制
   SELECT gallery_code, (pseudoid MOD 100000000) AS id
     FROM (
        SELECT photos.gallery_code,
               MIN(photos.id + (100000000 * photos.title_photo <> 'y')) AS pseudoid
          FROM photos
      GROUP BY photos.gallery_code 
     ) AS firsts

接下来,我们需要将第一张照片的列表加入到照片和图库表中。

代码语言:javascript
复制
 SELECT p.whatever, g.whatever
   FROM (
       SELECT gallery_code, (pseudoid MOD 100000000) AS id
         FROM (
            SELECT photos.gallery_code,
                   MIN(photos.id + (100000000 * photos.title_photo <> 'y')) AS pseudoid
              FROM photos
          GROUP BY photos.gallery_code 
         ) AS firsts
        ) AS f
   JOIN gallery AS g ON f.gallery_code = g.code
   JOIN photos AS p  ON f.id = p.id
  ORDER BY (whatever you need here) 

看到我们在这里干什么了吗?我们使用一个查询来使用指定的逻辑生成图片库/第一张照片关系。

然后我们使用它作为子查询(虚拟表)。我们将它加入到两个数据表中,以检索我们需要的信息,仅用于第一张照片。

提示:不要在应用软件中使用SELECT *。具体说明结果集中所需的列。

支持提示:除非你是真正的专家,否则不要使用GROUP BY的非标准的GROUP BY扩展。http://dev.mysql.com/doc/refman/5.5/en/group-by-extensions.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20828844

复制
相关文章

相似问题

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