// แต่ที่นี้คือว่าผลที่ได้เป็นดังนี้ เช่น
ID ขอวิชา ID กลุ่มวิชา
1 1
3 1
6 1
1 3
5 3
6 3
คือว่าผมต้องการให้มันแสดง ID ของวิชาที่ซ้ำกันออกมาอันเดียวนะครับแต่ไม่ออก คือลองใช้ DINTINCT แล้วก็ไม่ออกเพราะตอน where นั้นผมแวร์ที่ userID ของพนักงานซึ่งพนักงานคนนั้น ๆ จะถูกระบุมากกว่า 1 กลุ่มวิชาครับ
Tag : - - - -
Date :
13 มี.ค. 2551 08:16:13
By :
com1com
View :
2015
Reply :
10
No. 1
Guest
group by field
Date :
13 มี.ค. 2551 10:02:35
By :
กบนอกกะลา
No. 2
Guest
ไม่ได้ครับ
คือว่าดูโค๊ดอย่างง่าย ๆ ด้านล่างนี้นะครับ
เริ่มจากผมไป Query ข้อมูลเพื่อหากลุ่มวิชาที่ตรงกับพนักงาน และจากนั้นก็ไป Query ข้อมูลในรตารางวิชาที่ตรงกับกับกลุ่มวิชาที่พนักงานนั้น ๆ ต้องเรียน ถ้าใช้ Group by ไม่ได้ครับและใช้ DISTINCT ก็ไม่ได้เพราะมัน where ที่ userID มันเลขนำมาแสดงทั้งหมด
ถ้าในตารางแรกที่เข้าไป Query มี 2 ID ที่พนักงาน (userID) นั้นมีเช่น
1,3 จากนั้นก็ไป Query ข้อมูลในตารางที่ 2 เพื่อแสดงรายชื่อวิชาที่ตรงกับ ID ของตารางแรกและผลที่ได้คคือ
ID ตารางแรก IDตารางที่สอง
1 1
1 2
1 3
2 1
2 5
2 6
จะเห็นว่า ID ตารางที่สองมันมีซ้ำกันนะครับ ที่นี้ผมต้องการให้มันแสดง ID ที่สองที่ซ้ำกันออกมาแค่ อันเดียว เพราะเวลานำไปแสดงผลจะนำ ID ที่ตารางที่สองไปแสดงครับ
$strSql1 = "SELECT * FROM jdjs_especial WHERE userID='$userID'";
$result1 = mysql_db_query($dbname3, $strSql1);
while($row1=mysql_fetch_array($result1))
{
$strSql 2 = "SELECT DISTINCT clID FROM jdjs_spcourse WHERE jdsID='$row1[jdsID]' AND msnID<>4 AND cgID='4'";
$result2 = mysql_db_query($dbname3, $strSql);
while($row2 = mysql_fetch_array($result2))
{
echo $row2[clID];
echo "<br>";
}
}
Date :
13 มี.ค. 2551 10:35:57
By :
com1com
No. 3
Guest
group by ซ้อน group by
Date :
13 มี.ค. 2551 15:33:27
By :
กบนอกกะลา
No. 4
Guest
ซ้อนยังงัยครับ
Date :
13 มี.ค. 2551 15:45:52
By :
com1com
No. 5
Guest
select*from table where field=$var group by field;
while($row=....){
$var1= $row['field1'];
select*from table2 where field = $var1 group by field;
while($row2='''){
//คิวรี่ครั้งที่สองนั้นจะนำ jdsID ไปหาว่าตรงกับวิชาไหนบ้าง
$strSql1="SELECT * FROM $table2 WHERE jdsID='$jdsID' GROUP BY clID";
$result1=mysql_db_query($dbname1, $strSql1);
while($row1=mysql_fetch_array($result1))
{
echo $clID = $row1[clID];
echo "<br>";
}
}
ค่าที่ได้คือ
1
2
3
1
5
6
จะเห็นว่าค่าที่ได้มานั้นจะมีที่ซ้ำกันคือ 1 ที่ใช้ group by ไม่ได้นั้นเพราะว่าค่าที่ได้จากการคิวรี่ครั้งแรกนั้นมันจะได้
1 และ 2 มานะครับ...พอาเรานำค่านั้นมา where ที่การคิวรี่ครั้งที่สองนั้นมันก็จะ where ที่ค่าที่เรากำหนดมา ดังนั้นการใช้ group by มันไม่ได้ผลครับ
พอจะมีวิธีมั๊ยครับ...ชี้นำหน่อย
Date :
14 มี.ค. 2551 09:13:13
By :
com1com
No. 7
Guest
ใช้ subquery ครับ
SELECT `noID`,`jdsID`,`clID` FROM `clid` WHERE `jdsID` in (SELECT `jdsID` FROM `userid` WHERE `userID`='s0001') group by clID order by clID
ตาราง1 clID
ตาราง1 userid
จะได้ผลลัพธ์
1
2
3
5
6
ครับ
Date :
14 มี.ค. 2551 09:34:39
By :
takereu
No. 8
Guest
ใช้ subquery ครับ
SELECT `noID`,`jdsID`,`clID` FROM `clid` WHERE `jdsID` in (SELECT `jdsID` FROM `userid` WHERE `userID`='s0001') group by clID order by clID
ตาราง1 clID
*ตาราง2 userid
จะได้ผลลัพธ์
1
2
3
5
6
ครับ
*แก้ไข
Date :
14 มี.ค. 2551 09:37:31
By :
takereu
No. 9
Guest
หรือถ้าจะเอาเฉพาะฟิลด์ clID
ไม่ต้องใช้ group by ก็ได้
ใช้ distinct แทน แบบนี้ครับ
SELECT distinct `clID` FROM `clid` WHERE `jdsID` in (SELECT `jdsID` FROM `userid` WHERE `userID`='s0001') order by clID
ลองดู