1

几天来我一直在头疼,找不到实现我想要做的事情的方法(我已经在网上搜索过!)。我尝试过使用 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];
}

提前谢谢各位!

4

3 回答 3

3

我想你想要一个 WHERE 子句

SELECT user
FROM   models
WHERE NOT (country = '$country_id' AND hideme)
于 2012-09-19T15:44:35.850 回答
1

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

SELECT user FROM models WHERE country = '$country_id' AND hideme = 0
于 2012-09-19T15:45:27.420 回答
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 的模型,因此您也可以更改 where到:

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

于 2012-09-19T15:46:18.680 回答