【问题标题】:Inline IF statement in MySQLMySQL中的内联IF语句
【发布时间】:2012-09-19 15:42:23
【问题描述】:

这几天我一直在头疼,找不到实现我想要做的事情的方法(我已经在整个网络上搜索了!)。我尝试过使用 WHERE 子句、嵌套的 IF 和 CASE 函数都无济于事。

我有一张包含模型信息的表格。该信息包括一个名为“国家”的字段,这是他们实际居住的地方。还有一个名为“hideme”的字段,如果他们不想出现在来自该国家/地区的人的搜索结果中,则可以为 1,否则为 0。我正在使用 MaxMind 的 GeoIP DB 获取访问者所在的国家/地区。

所以这就是我想要的,更清楚地说:如果访问者来自美国,模型来自美国并且“hideme”字段为 1,她不应该出现在结果中。我对 PHP 或获取国家代码没有任何问题,只需正确的 SELECT 语句即可。

到目前为止,这是我的代码:

$select = "SELECT user
       IF (country != '$country_id', country,
           IF (hideme = 1, 1, 0))
       FROM models";

$result = mysql_query($select);

while ($row = mysql_fetch_array($result))
{
echo $row[user];
}

提前谢谢各位!

【问题讨论】:

  • SELECT * FROM models WHERE country=$country_id AND hideme=0 ?
  • 请提供示例数据和所需的输出。
  • @andrewsi 如果她有一个 hideme=1 但来自不同的国家怎么办?
  • @AdanVasconcelos - 看看 GolezTrol 的回答

标签: php mysql if-statement case


【解决方案1】:

我想你想要一个 WHERE 子句

SELECT user
FROM   models
WHERE NOT (country = '$country_id' AND hideme)

【讨论】:

  • 马克,它只给我匹配访问者国家的模型,如果我否定它!=,我不会得到那些匹配国家但没有打开隐藏的模型。
  • @AdanVasconcelos:我想我现在明白了你的问题是什么意思,但根本不是很清楚。你应该试着把你的问题说清楚。提供示例数据并显示您想要的结果。
  • 谢谢马克。这是我的第一篇文章。下次我会尽量说清楚。
【解决方案2】:
SELECT 
  user
FROM
  models
WHERE
  country != '$country_id' /* Those from another country */
  OR hideme = 0 /* .. or allowed to view, regardless of country */

这将返回来自另一个国家或将 hideme 设置为 0 的模型。这隐含地与返回模型相同,但来自同一国家且 hideme 设置为 1 的模型除外,因此您也可以更改位置:

SELECT 
  user
FROM
  models
WHERE
  NOT ( /* Except ... */
    country = '$country_id' /* .. those that are from the same country */
    AND hideme = 1 /* .. and having hideme set to 1. */
  )

后者有点难以阅读,但与文字描述更接近。结果是相同的,假设您没有任何国家或 hideme 值为 NULL 的记录。

【讨论】:

    【解决方案3】:

    也许我没有正确理解你的问题,但不仅仅是:

    SELECT user FROM models WHERE country = '$country_id' AND hideme = 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2022-07-07
      • 2013-02-15
      • 1970-01-01
      • 2017-03-24
      相关资源
      最近更新 更多