0 レビュー
2 回答
php-MySQLCodeigniter-$ this->db->queryとCLIの結果が一致しません
このクエリを使用して検索結果を返しています
$id = $this->auth->get_user_id();
$query = $this->db->query("
SELECT user_id,
facebook_id,
first_name,
last_name,
country,
state,
city,
picture,
cars_id,
cars_name,
cars_picture
FROM user_profiles
JOIN users
ON users.id = user_id
JOIN cars
ON cars.id_fk = user_id
WHERE user_id NOT LIKE '$id'
AND activated = 1
AND banned = 0
AND first_name LIKE '%$search_term%'
OR last_name LIKE '%$search_term%'
OR Concat(first_name, ' ', last_name) LIKE
'%$search_term%'
ORDER BY last_name ASC;
");
空の検索ボックスをクリックすると、すべてのユーザーが返されます。名または姓を入力すると、その特定のユーザーのみが検索結果として返されます。このクエリは、コマンドラインを使用して、 $id
、 $first_name
などを手動で入力(または空白のまま)した場合にも同様の結果をもたらします。>
しかし、これは奇妙な動作です。次の行はクエリに影響を与えないようです:
user_id NOTLIKE'$id'//行1
AND activated = 1
AND banned = 0
たとえば、現在のユーザーを検索結果から除外することはできません(1行目)。 activated
またはbanned
に何を入力しても、空白の検索をクリックすると、常にすべてのユーザー。
キッカーは、このSQLをコマンドラインで実行して手動で入力した場合です
user_id NOT LIKE '5'
AND activated = 1
AND banned = 0
結果を正しくフィルタリングします。
私が間違っていることを誰かが知っていますか?助けてくれてありがとう!
わからない
0
レビュー
答え :
解決策:
ORは最後のANDにバインドされていないと思います。これを試してください:
AND (first_name LIKE '%$search_term%'
OR last_name LIKE '%$search_term%'
OR Concat(first_name, ' ', last_name) LIKE
'%$search_term%' )
わからない
0
レビュー
答え :
解決策:
この動作の理由は、 AND
とOR
を混在させることに関係しています。条件とこれら2つの先行順序。
次のような状態の場合:
WHERE a
{-コード-1}b
{-コード-1}c
{-コード-1}d
{-コード-1}e
{-コード-1}f
またはいいね
WHERE a
{-コード-2}b
{-コード-2}c
{-コード-2}d
{-コード-2}e
{-コード-2}f
括弧は必要ありません。括弧を追加しても、結果は変わりません。
しかし、これがある場合:
WHERE a
{-コード-1}b
{-コード-1}c
{-コード-2}d
{-コード-2}e
{-コード-2}f
( AND
はOR
よりも優先順位が高いため)、次のように変換されます:
WHERE(a
{-コード-1}b
{-コード-1}c
{-コード-1}d
)。
{-コード-2}e
{-コード-2}f
次のような別の何かが必要な場合:
WHERE a
{-コード-1}b
{-コード-1}c
{-コード-1}(d
{-コード-2}e
{-コード-2}f
)。
だから、私はあなたが必要だと思います:
WHERE user_id NOT LIKE'$ id'
ANDアクティブ化=1
AND禁止=0
AND(first_name LIKE'%$ search_term%'
OR last_name LIKE'%$ search_term%'
OR Concat(first_name、''、last_name)LIKE
'%$ search_term%'
)。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。