ช่วยดูโค๊ตให้หน่อยคับ

คือผมต้องการค้นหาคับ
ไม่รู้ว่าใช้ sql ถูกรึป่าว


$sql="select * from data where idsubject='".$_SESSION['id_subject']."' and idtype='$id_type' or iddata LIKE '%".$_GET["txtKeyword"]."%' or note LIKE '%".$_GET["txtKeyword"]."%' ";



เวลามันค้นเสร็จข้อมูลมันมาหมดเลย
มันไม่ยอมแยก idsubject กับ idtype
27 ก.พ. 2553 4 1,738

ใส่วงเล็บเพื่อจัดกลุ่มด้วยก็ดีครับ เนื่องจากมีทั้ง AND และ OR  อยู่ด้วยกัน ไม่งั้นเดี๋ยวสับสน เช่น

(field1=x AND field2=y) OR field3 LIKE '%z%'

SQL จะทำคำสั่งในวงเล็บก่อนเสมอครับ
#1

ถ้าต้องการผลลัพท์ตาม idsubject และ idtype ควรเขัยนคำสั่งเป็น

idsubject=1 และ idtype=1 และ  (idata LIKE  '%x%' หรือ   note LIKE '%x%')
#2

มันยังไม่ได้อ่ะคับ
ลองใส่วงเล็บตามที่บอกแล้ว


#3

ไม่แน่ใจว่าประยุกต์ถูกหรือเปล่า ลองสังเกตข้อความภาษาไทยที่ผมใช้ดู และแปลเป็นคำสั่ง SQL เนื่องจากข้อมูลที่ให้มามีเท่านี้ผมก็ตอบตามที่ผมเข้าใจ

แล้วอย่าเอาโค้ดยาวๆ ส่งมาให้ล่ะ เพราะก็อาจไม่ได้รับคำตอบเข่นกัน (ดูหลายๆคำถามบนเว็บละกัน ไม่ได้รับคำตอบ)


AND ก็คือ และ หมายถึง นิพจน์ทั้ง หน้าและ หลัง AND ต้องเป็นจริงทั้งหมด ผมไม่รู้ว่าในความเป็นจริง idsubject และ idtype เท่ากันหรือไม่ (จากตัวอย่าง) แต่ที่ผมเขียนด้านบนคือหมายความว่า มันเท่ากัน

ส่วน OR หมายถึง อย่างใดอย่างหนึ่ง ถ้านิพจน์ ด้าน ซ้าย หรือ ขวา เป็นจริง อย่างใดอย่างหนึ่ง ก็จะคืนคำตอบมาให้แล้ว

หลักการเขียนคำสั่ง SQL ในกรณ๊ที่เราไม่เข้าใจ ควรเริ่มจากการทำความเข้าใจก่อน เราอาจทดสอบที่ละนิพจน์เพื่อดูว่าข้อมูลที่เลือกถูกต้องหรือไม่ก็ได้ เมื่อเราพอที่จะคาดเดาผลลัพท์ของมันได้ เราก็จะเขียนคำสั่งยาวๆ ได้เอง

ในกรณีคำสั่งที่เธอใช้ ในคำถาม ถ้าจะพิจรณาให้ดี idsubject และ idtype แทบไม่มีความหมาย เพราะผลลัพท์ส่วนใหญ่ จะได้มาจาก iddata และ idnote (ซึ่งใช้ OR) ซะมากกว่า
#4
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 1024
^