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 に設定されているモデルを除いて、モデルを返すと言うことと暗黙のうちに同じです。に:

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 に答える