สอบถามเรื่องการกำหนดเงื่อนไข การ query ข้อมูลจากตาราง 2 ตาราง ครับ
ขอแก้ไข(เริ่ม งง กะตัวเอง) ถ้าใช้ RIGHT JOIN หรือ LEFT JOIN จะใช้ในกรณีที่เลือกข้อมูลสองหรือหลายตารางที่มีข้อมูลสัมพันธ์กัน ส่วนกรณีของคุณนี้น่าจะใช้ INNER JOIN นะครับ
Code (PHP)
$sql = "SELECT student.* , register.* FROM student ,register WRERE student.std_id != register.reg_std_id ORDER BY student.std_id ASC";
ลองดูครับ
ประวัติการแก้ไข 2012-08-13 15:05:44 2012-08-13 15:16:03
Date :
2012-08-13 15:04:28
By :
arm8957
สวัสดีครับ
ขอบคุณมากๆ นะครับ
คือได้ลองทำแบบที่ว่าไปก่อนหน้านี้แล้วครับ
แต่มัน Query ข้อมูลนานมาก แล้วก็ แจ้ง error maximum ไปเลยครับ
Date :
2012-08-13 15:26:39
By :
yomaster
มีการกำหนด LIMIT ด้วย การแบ่งหน้าแล้ว จะใช้แทนกันได้หรือเปล่าครับ
ข้อมูลมีไม่เยอะนะครับ
เพราะเป็นแค่ตัวอย่าง มีไม่ถึง 10 records เองครับ
Date :
2012-08-13 15:46:55
By :
yomaster
ข้อมูลไม่เยอะก็ใช้ INNER JOIN ก็ได้ครับ
Code (PHP)
$sql = "SELECT student.* , register.* FROM student ,register WRERE student.std_id != register.reg_std_id ORDER BY student.std_id ASC LIMIT 10";
Date :
2012-08-13 15:50:57
By :
arm8957
ไม่ได้อยู่ดีครับผม
Date :
2012-08-13 15:58:41
By :
yomaster
มี ERROR ไม๊ครับ
Date :
2012-08-13 16:08:53
By :
arm8957
เหมือนเดิมครับ ถ้าไม่ขึ้น error maximum ก็จะค้างไปเลยครับ
Date :
2012-08-13 16:12:34
By :
yomaster
ขอลองก่อน สักครู่ครับ ขอสร้างฐานข้อมูลแปป
Date :
2012-08-13 16:15:53
By :
arm8957
ขอบคุณครับผม
ตอนนี้ก็ลองทั้ง WHERE... IS NULL แสดง ไม่พบข้อมูล
ลอง WHERE NOT EXISTS แสดง ไม่พบข้อมูล
Date :
2012-08-13 16:25:25
By :
yomaster
ผมขอฐานข้อมูลคุณได้ป่ะ? สร้างเองไม่รู้ว่าตรงกันรึป่าว [email protected]
Date :
2012-08-13 16:41:28
By :
arm8957
สักครู่นะครับ
Date :
2012-08-13 16:45:03
By :
yomaster
ผมส่งไฟล์ให้แล้วนะครับ
ตามอีเมล์ ด้านบน ครับ
รบกวนด้วยนะครับ
ขอบพระคุณครับ
Date :
2012-08-13 16:54:36
By :
yomaster
อ้างอิงจากฐานข้อมูลที่คุณส่งให้นะครับ
Code (PHP)
$sql = "SELECT t_student.std_idcard , t_club_selected.* FROM t_student ,t_club_selected WHERE t_student.std_id != t_club_selected.cs_std_id ORDER BY t_student.std_id ASC LIMIT 5";
จะได้ผลลัพธิ์ ดังภาพ
ลองดัดแปลงดูครับ
Date :
2012-08-13 17:11:07
By :
arm8957
สวัสดีครับ
t_student.std_id จะมีความสัมพันธ์ กับ t_club_selected.cs_std_id
(t_student.std_id=t_club_selected.cs_std_id)
ดังนั้น จะต้องเป็น นักเรียนรหัส 20100 (std_id=1) ไม่ได้ทำการลงทะเบียนในรายวิชาใดๆ เลยนะครับ
ส่วน นักเรียนรหัส 20101 (std_id=2) ทำการลงทะเบียนรายวิชา (cs_club_id=10) นะครับ
Date :
2012-08-13 17:20:34
By :
yomaster
งั้นใช้ if(){....} else {...} เช็คละกันครับ
Code (PHP)
$sql = mysql_query("SELECT t_student.std_idcard , t_club_selected.* FROM t_student ,t_club_selected WHERE t_student.std_id != t_club_selected.cs_std_id ORDER BY t_student.std_id ASC LIMIT 5 ");
$num = mysql_num_rows($sql);
if($num>0){
echo ' นักเรียนรหัสต่อไปนี้ไม่ลงทะเบียนเรียนวิชาอะไรเลย : ' ;
while($result = mysql_fetch_array($sql)){ echo $result['std_idcard'].', ' ; }
}
echo "<br /><br />";
$sql2 = mysql_query("SELECT t_student.std_idcard , t_club_selected.* FROM t_student ,t_club_selected WHERE t_student.std_id = t_club_selected.cs_std_id ORDER BY t_student.std_idcard ASC LIMIT 5");
$num2 = mysql_num_rows($sql2);
if($num2>0){
while($result2 = mysql_fetch_array($sql2)){
echo ' นักเรียนรหัส : ' .$result2['std_idcard'].' ลงทะเบียนรายวิชา :'.$result2['cs_club_id'] ;
}
}
แบบนี้น่าจะได้ครับ (โค๊ดแก้ไขล่าสุดนะครับ)
ประวัติการแก้ไข 2012-08-13 17:45:31 2012-08-13 17:49:07 2012-08-13 17:51:53
Date :
2012-08-13 17:38:31
By :
arm8957
สวัสดีครับ
ผมลอง run ใน phpMyAdmin ก็ได้ปกติคครับผม
แต่ว่า ผลที่ออกมา มันดึงข้อมูลจากตาราง student มาแสดง ร่วมกับตาราง club ดังนี้นะครับ
ข้อมูลนักเรียนที่ ไม่ได้ ลงทะเบียน จาก ตาราง student+ข้อมูล id นักเรียนที่ลงทะเบียนในตาราง club
ก็เลย งง ครับ
และพอผมเอาไปเขียนโค้ดร่วมกับ PHP มันก็จะแสดงข้อมูลดังนี้ครับ
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 4
ผมใช้ query ดังนี้
$sql = "SELECT t_student.std_id, t_club_selected.cs_id, t_club_selected.cs_std_id
FROM t_student, t_club_selected
WHERE t_student.std_id != t_club_selected.cs_std_id
ORDER BY t_student.std_id ASC LIMIT 0,5";
ยังไงก็ขอบบคุณมากๆ นะครับ ที่ช่วยเหลือ
Date :
2012-08-13 17:46:18
By :
yomaster
ขอบคุณมากๆ นะครับ สำหรับการช่วยเหลือ
เดี๋ยวผม ลอง หาวิธีดูอีกทีนะครับ
วิธีที่บอกมา ผมลองแล้วนะครับ
ยังไม่ได้ ครับผม ;)
ได้ไม่ได้ ยังไง จะมาแจ้งผลอีกทีนะครับ
Date :
2012-08-13 17:55:00
By :
yomaster
ลองเอาโค๊ดนี้ไปดูครับ เผื่อจะช่วยอะไรได้ครับ ผมก็พยายามละ
Code (PHP)
<?php
ob_start();
session_start();
ini_set('default_charset','utf-8');
header('Content-type: text/html; charset=utf-8'); # SET Header Encoding
$serv_name = "localhost";
$dbas_name = "test_join";
$user_name = "root";
$user_pass = "root";
$conn = @mysql_connect($serv_name, $user_name, $user_pass) or die
("ERROR : ไม่สามารถติดต่อเซิฟเวอร์ ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); # Create connection
@mysql_select_db($dbas_name, $conn) or die
("ERROR: ไม่สามารถเลือกฐานข้อมูล ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); # Select database
@mysql_query("SET NAMES UTF8") or die
("ERROR : ไม่สามารถเซ็ตอ็นโค๊ดดิ้ง ได้ค่ะ!!!<br /> Mysql report : ".mysql_error()); # SET database encoding
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?PHP
$sql = mysql_query("SELECT t_student.std_idcard , t_club_selected.* FROM t_student ,t_club_selected WHERE t_student.std_id != t_club_selected.cs_std_id ORDER BY t_student.std_id ASC LIMIT 5 ");
$num = mysql_num_rows($sql);
if($num>0){
echo ' นักเรียนรหัสต่อไปนี้ไม่ลงทะเบียนเรียนวิชาอะไรเลย : ' ;
while($result = mysql_fetch_array($sql)){ echo $result['std_idcard'].', ' ; }
}
echo "<br /><br />";
$sql2 = mysql_query("SELECT t_student.std_idcard , t_club_selected.* FROM t_student ,t_club_selected WHERE t_student.std_id = t_club_selected.cs_std_id ORDER BY t_student.std_idcard ASC LIMIT 5");
$num2 = mysql_num_rows($sql2);
if($num2>0){
while($result2 = mysql_fetch_array($sql2)){
echo ' นักเรียนรหัส : ' .$result2['std_idcard'].' ลงทะเบียนรายวิชา :'.$result2['cs_club_id'] ;
}
}
?>
</body>
</html>
Date :
2012-08-13 17:55:22
By :
arm8957
ลองแล้วครับ
ใน ข้อมูลที่ทดสอบ ได้นะครับ
แต่พอเอามาใช้จริงๆ กับข้อมูล 3 พันกว่า มันรวม ข้อมูลทั้งหมดเลยครับ
เช็คจาก ข้อมูลนักเรียน ที่ลงทะเบียน และ จำนวน นักเรียนทั้งหมดครับ
เดี๋ยวยังไงจะลองดูอีกทีนะครับ
ขอบคุณมากๆ นะครับ สำหรับการช่วยเหลือนะครับ
Date :
2012-08-13 18:25:43
By :
yomaster
สังเกตุ จากรูปนะครับ
มันจะแสดงผล รวมทั้งหมดเลย ใน หัวข้อ ของ นักเรียนที่ไม่ได้ลงทะเบียน
ทั้งๆ ที่ นักเรียนที่ลงทะเบียน มี 2 รหัส อยู่ด้านล่างครับ
Date :
2012-08-13 18:33:58
By :
yomaster
Load balance : Server 00