【问题标题】:SORT BY CASE IF statementSORT BY CASE IF 语句
【发布时间】:2021-06-27 17:19:48
【问题描述】:

这是我尝试过的。当应该有很多时,我得到零结果。任何帮助将不胜感激!

这是订购代码:

ORDER BY category ASC,
  CASE WHEN Business_Zip IN 'Certified_Zips' THEN Search_Order WHEN Business_Zip NOT IN 
'Certified_Zips' THEN Search_Order_2 END ASC,
  Referrals DESC,Business_Name,Login,id ASC";

这是整个查询:

"SELECT * FROM DATA" WHERE Zip_Radius LIKE '%$zipradius%' AND category NOT 
LIKE '$category' AND category NOT LIKE '$category2' AND category NOT LIKE 
'$category3' 

AND category2 NOT LIKE '$category' AND category2 NOT LIKE ('$category2' AND 
category2 != '') AND category2 NOT LIKE ('$category3' AND category3 != '')


AND category3 NOT LIKE '$category' AND category3 NOT LIKE ('$category2' AND 
category2 != '') AND category3 NOT LIKE ('$category3' AND category3 != '')

ORDER BY category ASC,

CASE WHEN Business_Zip IN 'Cerified_Zips' THEN Search_Order ELSE Business_Zip 
NOT IN 'Certified_Zips' 
THEN Search_Order_2 END ASC,

Referrals DESC,Business_Name,Login,id ASC";

$result = $conn->query($sql);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {
echo "stuff....";
}
} else {
echo "no results";
}}

$conn->close();

【问题讨论】:

  • 当应该有很多结果时我得到零结果。 ORDER BY 不能影响返回的行数。
  • 您可能遇到了语法错误。查看如何在 PHP 中处理 SQL 错误。这:Business_Zip IN 'Cerified_Zips' 无效。在IN 之后应该有一组值,例如Business_Zip IN (1234, 5678),而不是像 'Cerified_Zips' 这样的字符串。 CASE 表达式的其余部分也无效。

标签: php mysql sorting case


【解决方案1】:

您的“按代码排序”与“整个查询”代码不匹配。你有第二个“WHEN”或“ELSE”吗?如果你有一个 ELSE,我认为它后面不能跟一个“NOT IN”/“THEN”。如果您有第二个 WHEN,我建议将其替换为“ELSE Search_Order_2 END”。

编辑:结合@Akina 的评论,我同意 Order By 不能影响返回的行数。因此,您的代码中可能有错误。建议将第二个 WHEN 替换为 ELSE 支架。

EDIT2:看到更多代码,我会尝试通过以下方式对其进行修改:

"SELECT * FROM DATA WHERE Zip_Radius LIKE '%$zipradius%' AND category NOT 
LIKE '$category' AND category NOT LIKE '$category2' AND category NOT LIKE 
'$category3' 

AND category2 NOT LIKE '$category' AND category2 NOT LIKE '$category2' AND 
category2 != '' AND category2 NOT LIKE '$category3' AND category3 != ''


AND category3 NOT LIKE '$category' AND category3 NOT LIKE '$category2' AND 
category2 != '' AND category3 NOT LIKE '$category3' AND category3 != ''

ORDER BY category ASC,

CASE WHEN Business_Zip IN 'Cerified_Zips' THEN Search_Order ELSE Search_Order_2 END ASC,

Referrals DESC,Business_Name,Login,id ASC";

【讨论】:

  • 我的错...我已经更正了“整个查询”部分
  • 按照建议尝试:CASE WHEN Business_Zip IN 'Cerified_Zips' THEN Search_Order ELSE Business_Zip NOT IN 'Certified_Zips' THEN Search_Order_2 END ASC,(结果相同)
  • 也许我编辑的答案有帮助?我删除了你的 (),因为我不认为 ('$category2' AND category2 != '') 给你你想要的。我修改了 ELSE。
【解决方案2】:

首先我要感谢大家的帮助!非常感谢。

这结束了对我和我的情况的工作。希望它在未来对其他人有所帮助:

    SELECT * FROM DATA WHERE Zip_Radius LIKE '%$zipradius%' AND category NOT LIKE '$category' AND category NOT LIKE '$category2' AND category NOT LIKE '$category3' 

AND category2 NOT LIKE '$category' AND category2 NOT LIKE ('$category2' AND category2 != '') AND category2 NOT LIKE ('$category3' AND category3 != '')


AND category3 NOT LIKE '$category' AND category3 NOT LIKE ('$category2' AND category2 != '') AND category3 NOT LIKE ('$category3' AND category3 != '')

ORDER BY category ASC,

CASE WHEN Business_Zip LIKE '$Seal_Zips' THEN Search_Order ELSE Search_Order_2 END 
ASC,Referrals DESC,Business_Name,Login,id ASC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2020-10-26
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多