จากรูปผมอยากจะดึงข้อมูลแบบ and และ or
โดยดึงจาก med_id
เช่น ผมอยากดึง med_id - 101 and 102 and 301 or 501 and 601
ผลที่ได้ออกมาจะต้องได้ HN 2 ตัวคือ 46-153450 และ 49-174349 ครับ
ใช่ครับถ้าดึงแบบปกติก็ได้อยู่ครับ
แต่มันมีข้อกำหนดครับว่า med_id=(101 and 102 and 301) or (501 and 601)
ซึ่งค่าที่ได้จะต้องมีแค่ 2 ค่า HN คือ 46-153450 และ 49-174349
อันนี้แหละครับที่ผมไม่รู้วิธีเขียนคำสั่งอ่ะครับ
SELECT DISTINCT(HN)
FROM your_table
WHERE med_id IN('101','102','301','501','601') AND HN IN('46-153450', '49-174349')
การเขียนโปรแกรม AND กับคำว่า "และ" ไม่ได้มีความหมายเดียวกันเสมอไปนะครับ
(หรืออาจจะเพราะเราชินกับการใช้และจึงทำให้เวลาเขียนโปรแกรมตีความหมายผิด)
ตามที่กล่าวไว้
Quote:
แต่มันมีข้อกำหนดครับว่า med_id=(101 and 102 and 301) or (501 and 601)
ซึ่งค่าที่ได้จะต้องมีแค่ 2 ค่า HN คือ 46-153450 และ 49-174349
จะเขียนอีกได้ได้ดังนี้
Code (SQL)
SELECT DISTINCT(HN)
FROM your_table
WHERE
(med_id = '101' OR med_id = '102' OR med_id = '301' OR med_id = '501' OR med_id = '601')
AND
(HN = '46-153450' OR HN = '49-174349')
สั่งเกตว่าผมใช้ OR ในความหมายและของเจ้าของกระทู้นะครับ
select HN, group_concat(med_id) m_id from test group by HN
having (
concat(',', m_id , ',') like '%,101,%'
and concat(',', m_id , ',') like '%,102,%'
and concat(',', m_id , ',') like '%,301,%'
)
OR
(
concat(',', m_id , ',') like '%,501,%'
and concat(',', m_id , ',') like '%,601,%'
)