Mysql 如果值为“否”,请选择“其他”

Mysql 如果值为“否”,请选择“其他”,mysql,sql,pdo,Mysql,Sql,Pdo,我有一个名为的列,默认值为no。我根据is\u缩略图='yes' $query = $conn->prepare("SELECT * FROM project_data WHERE project_id = :projectId AND is_thumbnail = 'yes' LIMIT 1"); 有可能没

我有一个名为
的列,默认值为
no
。我根据
is\u缩略图='yes'

    $query = $conn->prepare("SELECT * FROM project_data 
                            WHERE project_id = :projectId 
                            AND is_thumbnail = 'yes' 
                            LIMIT 1");
有可能没有行的值为
yes
。在这种情况下,我希望选择具有相同的
projectId
的第一行,而不管
的值是什么

现在我知道我可以看到查询返回的内容,然后运行另一个查询。我想知道是否可以在一个查询中实现这一点,或者我是否可以利用PDO?我刚开始使用PDO。谢谢

示例数据:

id  project_id image                              is_thumbnail 
20  2          50f5c7b5b8566_20120803_185833.jpg  no
19  2          50f5c7b2767d1_4link 048.jpg        no
18  2          50f5c7af2fb22_4link 047.jpg        no

考虑到问题中描述的模式为给定的
项目id
显示了多行,仅使用
ORDER BY is\u缩略图…
解决方案可能不会产生良好的性能,例如,如果存在一个具有多个相关行的单个项目。对行进行排序的成本可能相当高,并且无法使用索引。可能需要的替代解决方案是:

SELECT * FROM (
  SELECT *
  FROM project_data 
  WHERE project_id = :projectId AND is_thumbnail = "yes"
  ORDER BY id DESC
  LIMIT 1

  UNION

  SELECT *
  FROM project_data 
  WHERE project_id = :projectId AND is_thumbnail = "no"
  ORDER BY id DESC
  LIMIT 1
) AS t 
ORDER BY t.is_thumbnail = "yes" DESC
LIMIT 1
虽然此解决方案的理解有点复杂,但它能够在
(project\u id,is\u thumbnail,id)
上使用复合索引快速查找与请求的条件完全匹配的一行。外部选择可确保在同时找到是/否行的情况下稳定地排序


请注意,您也可以只发出两个查询,并可能获得类似或更好的性能。为了使用上面的UNION和sub-select,MySQL将需要临时表,这在繁忙的环境中不是很好。

鉴于问题中描述的模式显示了给定的
项目id的多行,仅使用
order BY is\u缩略图…
解决方案可能不会产生良好的性能,例如,如果存在一个包含多个相关行的单个项目。对行进行排序的成本可能相当高,并且无法使用索引。可能需要的替代解决方案是:

SELECT * FROM (
  SELECT *
  FROM project_data 
  WHERE project_id = :projectId AND is_thumbnail = "yes"
  ORDER BY id DESC
  LIMIT 1

  UNION

  SELECT *
  FROM project_data 
  WHERE project_id = :projectId AND is_thumbnail = "no"
  ORDER BY id DESC
  LIMIT 1
) AS t 
ORDER BY t.is_thumbnail = "yes" DESC
LIMIT 1
虽然此解决方案的理解有点复杂,但它能够在
(project\u id,is\u thumbnail,id)
上使用复合索引快速查找与请求的条件完全匹配的一行。外部选择可确保在同时找到是/否行的情况下稳定地排序



请注意,您也可以只发出两个查询,并可能获得类似或更好的性能。为了使用上面的
UNION
和sub-select,MySQL需要临时表,这在繁忙的环境中不是很好。

您可以通过
is\u-thumbnail
订购,但我只返回一行。如果没有行包含
is_缩略图='yes'
那么我将返回0行如果我删除WHERE,那么我将从错误的项目中获取图像,我知道现在使用的顺序是正确的,谢谢@BevynQyou可以通过
is_缩略图
订购,但我只返回一行。如果没有行包含
is_thumbnail='yes'
那么我将返回0行如果我删除WHERE,那么我将从错误的项目中获取图像,我现在知道使用顺序,谢谢@BevynQ+1:一旦我了解了这个问题,你已经给出了答案。但是,首先创建缩略图不是更简单吗,罗尼?这似乎忽略了一个事实,就是缩略图是肯定的。我把它改为ASC而不是DESC,现在它可以工作了,谢谢you@symcbean所有这些都是缩略图,这一行表示,如果你知道我的意思,这是整个项目的缩略图预览。我猜这一行应该是这样的,
是预览
只是为了澄清,它的
ASC
不是
DESC
好吧,我一定是有点误解了你的问题,我会把它改成ASC。+1:我一想好这个问题,你就已经找到答案了。但是,首先创建缩略图不是更简单吗,罗尼?这似乎忽略了一个事实,就是缩略图是肯定的。我把它改为ASC而不是DESC,现在它可以工作了,谢谢you@symcbean所有这些都是缩略图,这一行表示,如果你知道我的意思,这是整个项目的缩略图预览。我想这一行应该是这样的,
是_preview
只是为了澄清,它的
ASC
不是
DESC
好吧,我一定有点误解了你的问题,我会把它改成ASC。