Fri 11 Aug 2006 00:01:28
$sql = "SELECT DISTINCT(s.id_sub), t.id_teach, s.name_sub , t.name_teach FROM register r, subject s , teacher t WHERE r.id_sub = s.id_sub AND id_std LIKE '$ss_Pwd' AND t.id_teach = r.id_teach ;";
-------------------------------------------------------------------------------------------
-DISTINCT มีไว้ทำอะไรครับ แล้วทำไมต้องวงเล็บ (s.id_sub) อันเดียวครับ
-ทำไมชื่อคอลัมถึงนำหน้าด้วย t. s. ครับ ผมดูในฐานข้อมูลก็ไม่ให้จะมี
-------------------------------------------------------------------------------------------
$result = mysql_db_query($ss_DBname, $sql );
while ($dbarr = mysql_fetch_array($result)) {
$ss_id_sub = $dbarr[id_sub];
$ss_id_teach = $dbarr[id_teach];
$ss_name_sub = $dbarr[name_sub] ;
$ss_name_teach = $dbarr[name_teach];
-------------------------------------------------------------------------------------------
$dbarr = mysql_fetch_array($result) มีไว้สำหรับถ่ายค่าจากตารางในตัวแปรresult แล้วเก็บไว้ที่ตัวแปร dbarr ในรูปแบบ array แล้วมี index เป็นชื่อ column ใช่หรือเปล่าครับ
ถ้าไม่ใช่กรุณาชี้แจงด้วยครับผม
ขอขอบคุณครับ
ส่วนที่ DISTINCT(s.id_sub) เพื่อระบุว่าให้เลือกเฉพาะ filed is_sub ที่ไม่ซ้ำกันเท่านั้น
t, s นั้นถ้าดูใน FROM แล้วจะเห็นว่ามีการ casting ครับคือการตั้งชื่อให้สั้นลงครับ เช่น teacher t (ถ้าเขียนเต็มๆจะเขียนในรูปแบบ teach AS t) โดย AS นั้นจะใส่ก็ได้หรือไม่ก็ได้ครับ ส่วน s ก็มาจาก subject
mysql_fetch_array() จะเป็นการ fetch ข้อมูลที่ได้มาจาก result resource ซึ่งได้จากการ query อีกทีครับ โดยจะมี require parameter คือ result resource และจะมี option parameter เป็นรูปแบบการ fetch ครับมี 3 ค่าคือ
MYSQL_ASSOC เพื่อให้การ fetch คืนค่ามาในรูปแบบ Associative array (มี index ของ array เป็นชื่อ field)
MYSQL_NUM เพื่อให้การ fetch คืนค่ามาในรูปแบบ array ธรรมดา มี index เป็นตัวเลข
MYSQL_BOTH เพื่อให้การ fetch คืนค่ามาเป็นแบบ array ธรรมดาและ Associative array (ใช้ resource เพิ่มไปด้วย)
โดยถ้าไม่ระบุ option parameter นั้นจะมีการ fetch ในรูปแบบ MYSQL_BOTH
Fri 11 Aug 2006 21:53:43
ขอบคุณมาก ๆ ครับ
Fri 11 Aug 2006 22:04:22
มีอีกนิดครับ
(s.id_sub), t.id_teach, s.name_sub , t.name_teach
ยังไม่ค่อยเข้าใจอะครับ
ตรงที่ t. s. t. น่ะครับ
และอันแรกมีวงเล็บ แต่ต่อมาไม่มีวงเล็บ! มันแตกต่างกันไหมครับ?
WHERE r.id_sub = s.id_sub AND id_std LIKE '$ss_Pwd' AND t.id_teach = r.id_teach ;";
หมายความว่ายังไงอะครับ
รบกวนด้วยนะครับ
เพิ่งศึกษา php ได้ไม่กี่วันเอง ดูโคดตรงนี้ไม่ออกก็เลยทำความเข้าใจอันต่อไปไม่ได้ครับ
ลองอ่านตรงนี้ครับ ตามที่ผมได้แจ้งไว้แล้วว่าเป้นการ Casting ครับ
ส่วนที่ (s.id_sub) นั้นมันมาจาก DISTINCT(s.id_sub) เพื่อระบุว่าต้องการใข้ select เลือก record ที่ id_sub นั้นไม่ซ้ำกันเลย ต้องการเพียง field นี้เพียง field เดียวที่ไม่ซ้ำกันครับ
โดยปกติมักจะเห็น SELECT DISTINCT field1, field2, ... อันนี้คือตรวจสอบว่า ทุก record จะต้องมีทุก field ไม่ซ้ำกันทั้ง record ครับ เช่น
| day | name |
------------------
| mon | นาย ก. |
| tue | นาย ก. |
ถ้า SELECT DISTINCT (name), day จะได้ record แรกเพียง record เดียว
ถ้า SELECT DISTINCT name, day จะได้ทั้ง 2 record ครับ
ส่วน WHERE Clause นั้นก็ใช้ตัวแปรที่ได้ทำการ Casting ไว้นั่นล่ะครับ เช่น r.id_sub ก็คือ register.id_sub, s.id_sub ก็คือ subject.id_sub (ตั้งใจจะถามตรงนี้หรือเปล่าครับ ถ้าไม่ใช่กรุณาถามใหม่แล้วกัน)
ทั้งหมดนี้ไม่ใช้ไวยกรณ์ของภาษา PHP ครับเป็นไวยกรณ์ของ SQL92 หาอ่านได้ทั่วไปครับเป็นมาตรฐานที่แต่ละ RDBMS จะต้องรองรับคำสั่งที่ประกาศเป็นมาตรฐานครับ
Sat 12 Aug 2006 21:19:22
WHERE r.id_sub = s.id_sub AND id_std LIKE '$ss_Pwd' AND t.id_teach = r.id_teach ;";
แล้ว Like ต่างจาก = ยังไงครับ
= ของ sql คือ equal ใช่ไหมครับ มันไม่เหมือนกับ php ใช่ไหมครับ
ส่วน LIKE นั้นเป็นการเปรียบเทียบครับ คล้ายการการใข้งาน = แต่ว่าสามารถใส่ wildcard เพื่อการเปรียบเทียบในลักษณะ pattern ได้ครับ อ่านเพิ่มเติมได้ที่
http://www.techonthenet.com/sql/like.php
http://www.1keydata.com/sql/sqllike.html
http://www.sql-tutorial.net/SQL-LIKE.asp
น่าจะพอมองเห็นภาพนะครับ
Sun 13 Aug 2006 22:53:58

















