ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: theonsenz ที่ 23 ธันวาคม 2012, 10:50:01



หัวข้อ: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: theonsenz ที่ 23 ธันวาคม 2012, 10:50:01
SELECT table1.id_name,table1.date,table1.charac,table2.name FROM table1INNER JOIN table2 ON table2.id_name=table1.id_name

ตอนนี้คือข้อมูลที่ select ออกมาทั้งหมดครับ

แต่อยากให้กรองออกโดยที่เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด

ช่วยทีครับ ขอบคุณล่วงหน้า  :P


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: mikeyx ที่ 23 ธันวาคม 2012, 10:50:44
group by


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: theonsenz ที่ 23 ธันวาคม 2012, 10:58:11
group by มันไม่ใช่ข้อมูลล่าสุดอ่ะครับ มันเอาตัวแรกออกมา


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: dekmv ที่ 23 ธันวาคม 2012, 11:30:43
SELECT DISTINCT column_name(s)
FROM table_name

ผมไม่ได้ว่า mySQL หรือ Oracle นะครับ ถ้าผิดขออภัยนะครับ


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: c0untry-m@n ที่ 23 ธันวาคม 2012, 11:34:47
ประมาณนี้หรือเปล่าลองดูนะครับ ผมไม่ได้ลองนะ ผิดพลาดขออภัย

SELECT DISTINCT(table1.id_name),table1.date,table1.charac,table2.name FROM table1 LEFT JOIN table2 ON table2.id_name=table1.id_name


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: psuriya ที่ 23 ธันวาคม 2012, 11:45:14
SELECT table1.id_name,table1.date,table1.charac,table2.name FROM table1INNER JOIN table2 ON table2.id_name=table1.id_name

ตอนนี้คือข้อมูลที่ select ออกมาทั้งหมดครับ

แต่อยากให้กรองออกโดยที่เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด

ช่วยทีครับ ขอบคุณล่วงหน้า  :P

GROUP BY table1.id_name ORDER BY table1.id_name DESC

ถ้า table1.id_name เป็นตัวเลขและAuto ครับ หรือถ้ามีฟิลด์ที่เก็บเป็น Datetime ก็ ORDER BY ฟิลด์นั้นครับ


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: c0untry-m@n ที่ 23 ธันวาคม 2012, 13:09:16
ประมาณนี้หรือเปล่าลองดูนะครับ ผมไม่ได้ลองนะ ผิดพลาดขออภัย

SELECT DISTINCT(table1.id_name),table1.date,table1.charac,table2.name FROM table1 LEFT JOIN table2 ON table2.id_name=table1.id_name

ที่ไม่ใช้ group by เพราะถ้ามีคอลัมภ์อื่นต่างกัน ถึง group by มันก็จะได้ id_name ซ้ำกันมาอีกครับ
เช่น ในกรณีที่ 1 id_name มี date ต่างหลาย record ที่ต่างกัน เป็นต้นครับผม

อันนี้หมายถึงการ group by ทุกฟิลด์ที่ดึงมานะครับ
แต่ถ้า group by id_name ตัวเดียว แต่ดึงข้อมูลหลายฟิลด์ ไม่แน่ใจว่า mysql ใช้ได้หรือเปล่า
แต่สำหรับ ms sql ไม่ได้ครับ ตัวอื่นไม่แน่ใจ

ทั้งนี้ผมก็ยังไม่ได้ทดสอบนะครับ เพียงแต่แนะนำแนวทางให้ไปทดลองเองครับ ผิดพลาดขออภัย


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: MapTwoZa ที่ 24 ธันวาคม 2012, 02:17:29
ผมว่าทำแบบนี้นะ

จากเงื่อนไขนี้ >> เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด
จะได้
SELECT DISTINCT t.id_name from table1 t ORDER BY t.date

จากนั้นก็ยัด sub query ลงไปครับ จะได้
SELECT DISTINCT t.id_name,(select * from table1 ta where ta.pk = t.pk) from table1 t ORDER BY t.date

จบละครับ ใน sub query แก้เองเด้อ select * guide ให้เฉยๆ


หัวข้อ: Re: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
เริ่มหัวข้อโดย: ohmohm ที่ 26 ธันวาคม 2012, 17:38:53
สมมติว่ามี table1.date เก็บค่าความล่าสุด (คือวันเวลา ยิ่งมากยิ่งล่าสุด)

SELECT table1.id_name, table1.date, table1.charac, table2.name
FROM (SELECT id_name, max(date) AS date, charac FROM table1 GROUP BY id_name, charac) AS table1
INNER JOIN table2
ON table2.id_name=table1.id_name