MySQL中的内联IF语句

时间:2012-09-19 15:42:23

标签: php mysql if-statement case

我已经打破了我的头几天了,找不到办法实现我想做的事情(我在网上搜索过!)。我尝试过WHERE子句,嵌套的IF和CASE函数都无济于事。

我有一张包含模型信息的表格。该信息包括一个名为“country”的字段,这是他们实际居住的地方。还有一个名为“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];
}

先谢谢你们!

3 个答案:

答案 0 :(得分:3)

我想你想要一个WHERE子句

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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的记录。