select*from tb_personal_doc where concat(send_title,',',send_num) like '%%' AND owner LIKE 'personal1' AND send_date BETWEEN '2021-08-09' AND '2021-08-09'
ส่วนอันนี้ เลือก 2 เงื่อนไข ผลลัพธ์ออกมาครับ แต่ไม่ถูกต้องมันออกมาทั้ง ช่วงวันที่ของคนอื่น และของตัว radio ที่เราเลือก
Code (PHP)
select*from tb_personal_doc where concat(send_title,',',send_num) like '%%' AND owner LIKE 'personal1' OR send_date BETWEEN '2021-08-09' AND '2021-08-09'
A หรือ B เท่ากับ 10 และ C เท่ากับ 20
ถ้าจะจัดกลุ่มเอา A หรือ B ก็ได้ อันใดอันหนึ่งเป็นจริงก็คือใช้ได้ แต่ C ก็ต้องมีเงื่อนไขเป็นจริงด้วย
แบบนี้ก็เอาวงเล็บคลุม (A OR B) AND C
แต่ถ้าจะเอา B จะต้องเท่ากับ 10 และ C จะต้องเท่ากับ 20 ด้วย เงื่อนไขจึงจะเป็นจริง ในขณะที่เงื่อนไขกลุ่มนี้ ถ้าไม่เป็นจริงยังไง A ก็ต้องเท่ากับ 10
แบบนี้ก็จะเป็นกลุ่ม B และ C แบบนี้ A OR (B AND C)
ยกตัวอย่างให้ชัดขึ้นเป็นโค้ด
กลุ่ม A หรือ B
WHERE (A = 10 OR B = 10) AND C = 20
(A = 10 OR B = 10) AND C = 20
ถ้า A หรือ B อันใดอันหนึ่งเป็นจริง หรือทั้งสองอันเป็นจริง และ C ก็ต้องเป็นจริงด้วย จะได้ผลลัพธ์
A = 10 OR (B = 10ANDC = 20)
ถ้า A เป็นจริงเพียงอย่างเดียว หรือ กลุ่ม B และ C ต้องเป็นจริงทั้งคู่ จึงจะได้ผลลัพธ์
คือถ้า A ก็เป็นจริง กลุ่มหลังก็เป็นจริง = ผ่าน
A เป็นจริง กลุ่มหลังไม่เป็นจริงเพราะ (B กับ C ไม่จริงเลยหรือจริงอันเดียว) = ไม่ผ่าน
A ไม่เป็นจริง ส่วนกลุ่มหลังเป็นจริงแค่อันเดียว = ไม่ผ่าน เพราะติดเงื่อนไข AND ต้องเป็นจริงทั้งคู่
$sql="select*from tb_personal_doc where concat(send_title,',',send_num) like '%$strkeyword%' AND (owner = '$strp1' AND send_date BETWEEN '$strsdate_search' AND '$stredate_search')";
if(empty($strkeyword) && empty($strp1) && empty($strsdate_search) && empty($stredate_search)){
echo $sql="select*from tb_personal_doc where 1";
}elseif(!empty($strsdate_search) && !empty($stredate_search)){
echo $sql="select*from tb_personal_doc where send_date BETWEEN '$strsdate_search' AND '$stredate_search'";
}elseif(!empty($strp1) && !empty($strsdate_search) && !empty($stredate_search)){
echo $sql="select*from tb_personal_doc where owner = '$strp1' AND send_date BETWEEN '$strsdate_search' AND '$stredate_search'";
}else{
echo $sql="select*from tb_personal_doc where concat(send_title,',',send_num) like '%$strkeyword%' AND owner = '$strp1'";
}
$sql = 'SELECT * FROM `tb_personal_doc` WHERE 1';
if (isset($strsdate_search) && !empty($strsdate_search) && isset($stredate_search) && !empty($stredate_search)) {
$sql .= ' AND (`send_date` BETWEEN :start_date AND :end_date)';
}
if (isset($strp1) && !empty($strp1)) {
$sql .= ' AND `owner` = :owner';
}
$sql .= ' AND CONCAT(`send_title`, ', ', `send_num`) LIKE :searchkeyword';