【问题标题】:MySQL return row if exists, otherwise different rowMySQL 如果存在则返回行,否则返回不同的行
【发布时间】:2016-07-26 23:42:59
【问题描述】:

需要有关此查询的帮助...

SELECT field_value, file
FROM " . $wpdb->prefix . "cf7dbplugin_submits
WHERE form_name = '" . $form_name . "' AND submit_time = '" . $submit_time . "' AND (field_name = 'csv_parts_file' OR field_name = 'csv_paste_file');

基本上,我想在这里只返回 1 行,但我需要获取 field_name = 'csv_parts_file' 所在的行(如果存在),但如果该行不存在,则我需要获取 field_name = 'csv_paste_file' 所在的行。我想我可能需要在这里做一个CASE,但不知道怎么做。对 CASE 语句没有太多经验。

这里非常感谢任何帮助。

数据库表结构如下:

【问题讨论】:

  • 根本不需要case语句;只需将ORDER BY field_name LIMIT 1 添加到您现有的 SQL 中
  • @MarkBaker 我正在使用$wpdb->get_row,所以不要认为它会起作用。
  • 你为什么不认为它会起作用?你相信一个复杂的 CASE 会起作用!如果两者都有,则 ORDER BY 子句将 csv_parts_file 放在首位,如果没有 csv_parts_file 条目,则将 csv_parts_file 放在首位,并且 LIMIT 1 只会选择第一个条目
  • 使用 $wpdb->get_row 不起作用,必须使用 $wpdb->get_results 来实现,这是我试图避免的,因为 get_results 将其拆分为更深的数组...
  • 清除您的查询并放入一些原始值,即使它只是一个样本值也可以。和你需要的结果。谢谢

标签: php mysql wordpress


【解决方案1】:

好吧,实现它的方式有点奇怪,但它应该可以工作:

SELECT field_value, file, IF(field_name = 'csv_parts_file', 0, 1) as condition
FROM " . $wpdb->prefix . "cf7dbplugin_submits
WHERE form_name = '" . $form_name . "' 
AND submit_time = '" . $submit_time . "' 
AND (field_name = 'csv_parts_file' OR field_name = 'csv_paste_file')
ORDER BY condition
LIMIT 1

【讨论】:

  • 不确定 OR 是否是正确答案,因为它可能返回 >1 行。
  • @Jeff LIMIT 1 时如何返回超过 1 行?
  • 你说得对,我错过了最后的 LIMIT 1 语句......但是,在这种情况下,它将返回哪 1 行?满足 OR 中第一个条件的行还是满足第二个条件的行?
  • 这就是你所拥有的ORDER BY condition,它将把 field_name = 'csv_parts_file' 放在第一位
猜你喜欢
  • 2012-04-20
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2021-11-19
  • 2018-12-12
  • 1970-01-01
相关资源
最近更新 更多