ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programming สอบถามการ query ข้อมูลใน mysql มาแสดงเป็นตาราง
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: สอบถามการ query ข้อมูลใน mysql มาแสดงเป็นตาราง  (อ่าน 1351 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ottoanime
Newbie
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« เมื่อ: 08 กุมภาพันธ์ 2018, 22:58:16 »







สวัสดีครับ พี่ๆ เพื่อนๆ ผมมีเรื่องสอบถามเกี่ยวกับการนำ Database มาเรียงโชว์ครับ


จากรูปผมต้องการนำข้อมูลมา Query แสดงเป็นตารางดังต่อไปนี้
- Column 1 แสดงชื่อบริษัทโดยชื่อบริษัทหมายถึงกรอบสีเขียว (ตามรูปที่ 1) โดยภายใน 1 ชื่อบริษัท
  จะมีจำนวนหลายคน แต่ column 1 ผมต้องการให้ชื่อบริษัทเรียงลงมาตามด้านล่าง (ตามรูป 2)

- Column 2 คือจำนวนคนภายในบริษัท หมายถึงกรอบสีน้ำตาล (ตามรูป 1) ตัวเลขในกรอบสีน้ำตาล
  คือ id ของสมาชิก id 41,42,43 ไม่ใช่จำนวนลำดับ ผมต้องการให้ column ที่ 2 แสดงการนับ
 จำนวนคนที่แตกต่างกันไป (เลข id ไม่เกี่ยว แค่นำมาแสดงให้เห็นว่า 1 บริษัทมีหลายคน) ตารางนี้ผม
 อยากให้แสดงว่าแต่ละบริษัทมีสมาชิกเป็นจำนวน บริษัทละกี่ท่าน

- column 3 คือ จำนวนเพศชายในแต่ละบริษัท ตามกรอกบสีแดง รูปที่ 1 ตรงนี้ผมอยากนับว่าแต่ละ
  บริษัทมีเพศชายจำนวนกี่คน ซึ่งส่วนนี้เป็นชื่อ Column fieldid (fieldid 7 หมายถึงชื่อบริษัท,
 field id 11 หมายถึงเพศ) ใช้ fieldid ชื่อเดียวกันแต่ต่างเลขกัน

- column 4 คือเพศหญิงแทนด้วยกรอบสีน้ำเงิน ส่วนนี้ใช้ fieldid 11 ร่วมกันกับเพศชาย
  แต่ column นี้ ผมอยากให้นับจำนวนว่ามีเพศหญิงในบริษัทกี่คน


ปล. ผมไม่รู้จะ query ออกมาอย่างไร เป็้นมือใหม่รบกวนเพื่อนๆ แนะนำด้วยครับ หรือหากมีใครดุแล้ว
   สามารถทำได้ ลองติดต่อมาคุยที่ line id :tae_typhoon, email : tae_typhoon@hotmail.com
บันทึกการเข้า
mikeyx
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 268
ออฟไลน์ ออฟไลน์

กระทู้: 4,008



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 08 กุมภาพันธ์ 2018, 23:14:42 »

ออกแบบตารางใหม่ดีกว่าครับมันมั่ว
บันทึกการเข้า
infamous
ก๊วนเสียว
*

พลังน้ำใจ: 14
ออฟไลน์ ออฟไลน์

กระทู้: 295



ดูรายละเอียด
« ตอบ #2 เมื่อ: 09 กุมภาพันธ์ 2018, 00:36:05 »

ผมไม่แน่ใจว่าท่านได้ศึกษาการออกแบบฐานข้อมุลมามากน้อยขนาดไหน
แต่ผมดูแล้ว ฐานข้อมูลแบบนี้มันไม่ต่างกับ excel ครับ ดูยาก ทำ relation ยาก ต่อมาคือจะ query ก็จะยากตามไปด้วยครับ

ถามว่า query ให้ได้ผลลัพธ์ตามที่ท่านต้องการได้หรือไม่ คำตอบคือ ได้ครับ แต่ต้องใช้พวก sub-query หรือพวก nested query
แต่ปัญหาของ sub และ nested คือ เวลา query นับ count แล้วมันจะช้า ต้องทำ index column ช่วย
แต่เวลาต่อมาคือถ้า table มันบวมหรือมีขนาดใหญ่ขึ้นเช่นหลักแสน งานงอกครับ

ผมแนะนำให้ออกแบบ table ใหม่ครับ ทำ relational ให้ดี อย่าลืมทำ index column ที่เป็น condition สำหรับ join ด้วย มันจะดีกว่ามาก

ตัวอย่างด้านล่างคือ table แบบ relational ง่ายๆครับ
company tb
---
+ cid (PK)
+ cname

stuff tb
---
+ sid (PK)
+ cid (FK)
+name
+email
+phone
+gender

ตัวอย่าง query แบบ subquery อันนี้ผมนั่งเทียนให้ดูครับ ไม่มีเวลาว่างทดสอบให้ท่าน ช่วงนี้งานเขียนโปรแกรมค่อนข้างเยอะ
เด๋วถ้าไม่ได้ยังไง ให้อัพเดทโพสนะครับ ว่างๆจะเข้ามาดูให้
---
select c.*, count(s.sid) as total_stuff,
 (select count(sid) from stuff where gender='mail' and sid=c.cid) as total_m,
 (select count(sid) from stuff wehre gender='femail' and sid=c.cid) as total_fm
 from company c
 left join staff s
 on c.cid = s.cid
 group by c.cid
บันทึกการเข้า
ฟาร์มเฮ้า
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 49
ออฟไลน์ ออฟไลน์

กระทู้: 1,014



ดูรายละเอียด
« ตอบ #3 เมื่อ: 09 กุมภาพันธ์ 2018, 01:43:45 »

ออกแบบตารางได้มั่วมาก แต่มันก็สามารถ query แบบที่เจ้าของกระทู้ต้องการได้ แต่ต้องใช้หลายเงื่อนไขซึ่งจะเปลือง cpu โดยเปล่าประโยชน์ ถ้าทำไว้ดูเองก็โอเค แต่ถ้าจะทำไว้บนเว็บมีการเรียกใช้บ่อย ๆ แนะนำให้ออกแบบตารางใหม่
บันทึกการเข้า
maneemeena
คนรักเสียว
*

พลังน้ำใจ: 8
ออฟไลน์ ออฟไลน์

กระทู้: 189



ดูรายละเอียด
« ตอบ #4 เมื่อ: 09 กุมภาพันธ์ 2018, 12:51:22 »

แนะนำให้ศึกษาเรื่อง normalization ครับ จะช่วยได้มาก
บันทึกการเข้า
ottoanime
Newbie
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 9



ดูรายละเอียด
« ตอบ #5 เมื่อ: 11 กุมภาพันธ์ 2018, 12:44:39 »

เรียน ทุกๆ ท่านขอบคุณสำหรับคำชี้แนะนะครับขอแบ่งตอบเป็น 2 เรื่องดังนี้

1. ตารางนี้ไม่ใช่ผมทำเอง แต่เกิดจากการติดตั้งระบบ LMS ระบบหนึ่งซึ่งผมนำตารางมา Develop ต่อ เพื่อนำผลข้อมุลมาแสดง

2. ส่วนการแก้ปัญหาผมแก้ได้แล้วครับ วิธีคือ
   - query ตารางดังกล่าวแบบ Count บริษัท Count จำนวน ไปเก็บอีก Table หนึ่งที่สร้างขึ้นเอง
   - จากนั้นค่อยมา query เพศ โดยเอาตารางที่ query ไปเก็บรอบแรก set เป็น indexprimary แล้วชี้ไปเพื่อนับจำนวนเพศ ชาย หญิง

อย่างไรขอบคุณสำหรับคำแนะนำนะครับ
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์