我使用CodeIgniter的db類來創建查詢。多個WHERE在MySQL語句中給我帶來麻煩
查詢最終看起來像這樣;
SELECT `user_id`, `firstname`, `lastname`, `email`, `school_id`, `country_id`
FROM (`users`)
WHERE `user_id` != '1'
AND `firstname` = 'thomas'
OR `lastname` = 'thomas'
OR `email` = 'thomas'
OR `firstname` = 'jefferson'
OR `lastname` = 'jefferson'
OR `email` = 'jefferson'
在這種情況下,用戶搜索「托馬斯·傑斐遜」和用戶自己的ID爲1。因此,要確保用戶無法搜索自己會檢查,以便user_id是不是1。
我知道查詢並不好,但它完全適用於什麼,我需要它,以及我是懶得做是正確的。
這一切背後的PHP代碼是
$this->db->select('user_id, firstname, lastname, email, school_id, country_id')->from('users');
$this->db->where('user_id !=', $this->session->userdata('user_id'));
for ($i = 0; $i < count($searchQuery); $i++) {
if ($i == 0) {
$this->db->where('firstname', $searchQuery[$i])->or_where('lastname', $searchQuery[$i])->or_where('email', $searchQuery[$i]);
} else {
$this->db->or_where('firstname', $searchQuery[$i])->or_where('lastname', $searchQuery[$i])->or_where('email', $searchQuery[$i]);
}
}
$this->db->limit(10);
$query = $this->db->get();
我99%肯定的是,
WHERE `user_id` != '1'
AND(<-- this) `firstname` = ...
是錯誤的,但我似乎無法找出一種不同的方式做它。