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

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

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

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

กระทู้: 1,277



ดูรายละเอียด เว็บไซต์
« เมื่อ: 02 ตุลาคม 2012, 12:29:25 »

สมมติว่า ผมมี 4 ตาราง 1.tv 2.radio 3.laptop 4.tablet
select * from ตาราง order by RAND() limit จำนวนที่อยากได้

มันมีวิธีที่ผมจะเขียน random ที่เดียว 4 ตาราง เลยมัยครับโดยใช้โค้ด sql แค่บรรทัดเดียว
« แก้ไขครั้งสุดท้าย: 02 ตุลาคม 2012, 12:41:56 โดย Lunifer » บันทึกการเข้า

aekarach
ก๊วนเสียว
*

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

กระทู้: 404



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 02 ตุลาคม 2012, 12:38:09 »

เขียนแบบหลายบรรทัดแต่ Statement เดียว

โค๊ด:
select * from (
  select * from tv
 
  union all
 
  select * from radio
 
  union all
 
  select * from laptop
 
  union all
 
  select * from tablet
) Order by RAND();

อันนี้เขียนแบบบรรทัดเดียวแต่ Statement เดียว

โค๊ด:
select * from (select * from tv union all select * from radio union all select * from laptop union all select * from tablet) Order by RAND();

ปล.ไม่แน่ใจ Syntax ถูกต้องหรือเปล่า แต่ที่แน่ๆ ออกแบบ Database แบบนี้ถือว่าไม่ผ่าน
บันทึกการเข้า

Lunifer
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,277



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 02 ตุลาคม 2012, 12:41:30 »

ขอบคุณครับเดี๋ยวเอาไปลองดูก่อน เพราะมันเป็นก้อนเดียวกัน สินค้าเป็นหมื่น เวลาดึงจากโฮส เปิดเว็บช้ามากเกิน 6 วิ ผมเลยลองแยกดูว่าจะ คิวรี่หน้าเว็บเร็วขึ้นมัย
1 ตารางรวมทุกอย่างหลายหมื่น
กับหลายตารางแยกเก็บ table เป็นชนิดสินค้า

ที่บอกว่าไม่ผ่านรบกวนแนะนำด้วยครับมีวิธีไหนดีกว่านี้มัยครับ  wanwan017
« แก้ไขครั้งสุดท้าย: 02 ตุลาคม 2012, 12:43:57 โดย Lunifer » บันทึกการเข้า

aekarach
ก๊วนเสียว
*

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

กระทู้: 404



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 02 ตุลาคม 2012, 12:47:40 »

ระหว่าง Table Master Product กับ Table Transaction Production ควรแยกจากกัน

ใน Transaction refer กับ Master ด้วย Primary Key เช่น ProductID ก็เพียงพอแล้ว เพื่อประหยัดเนื้อที่และความเร็วในการ Query
และถูกต้องตามหลัก Database Normalization


ต่อให้เซิร์ฟเวอร์แพงแค่ไหน แต่ถ้าออกแบบไว้ไม่ดี เซิร์ฟเวอร์ก็ทำงานได้ไม่ดีเช่นกัน

อยากเห็นคนไทยออกแบบดาต้าเบสเก่งๆ เอาใจช่วยครับ
บันทึกการเข้า

Lunifer
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,277



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 02 ตุลาคม 2012, 12:54:36 »

Normalization
เป็นสคิปที่ต้องดึงข้อมูลพวก รูปภาพ/ราคา/รายละเอียด/ดาว มาแสดง
ถ้าผม แยกอีก ตามหลักที่เรียนมาช่วง มหาลัย มันจะทำให้เร้วขึ้นหรอครับ
เพราะถ้า มาถึง แรนดอมไป ก็ดึง ID ไปก่อน เพื่อที่จะมาดึง ข้อมูลที่แยกไว้อีกตาราง
เร็วขึ้นเยอะมัยครับ เพราะลองแล้วไม่ได้ผล ความช้ายังเท่าเดิม กลายเป้น ดึงดาต้า 2 ครั้งอีก
บันทึกการเข้า

mikeyx
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

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

กระทู้: 4,018



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 02 ตุลาคม 2012, 13:00:51 »

Normalization ถ้าข้อมูลไม่เยอะไม่เกินหลักแสน record ก็เร็วดีครับเวลาเรียกใช้ข้อมูลแต่ถ้าเยอะกว่านั้นต้องมานั่งแก้กันใหม่ให้เร็วยิ่งขึ้นด้วยการแคชที่ดาต้าเบสกับ file อีกรอบ
บันทึกการเข้า
Lunifer
หัวหน้าแก๊งเสียว
*

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

กระทู้: 1,277



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 02 ตุลาคม 2012, 13:02:59 »

ผมเขียนสคริปทำอเมซอนครับ คิดว่าเกิน 100000 สินค้าแน่ๆ ขอบคุณครับ +1 ทั้ง 2 ท่านปล่อยตกเลยครับ
บันทึกการเข้า

icez
Verified Seller
หัวหน้าแก๊งเสียว
*

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

กระทู้: 2,880



ดูรายละเอียด
« ตอบ #7 เมื่อ: 02 ตุลาคม 2012, 13:06:25 »

ไอ้ random นี่แหละครับตัวทำให้ช้า ไม่ว่าจะแยกหรือไม่แยก เพราะมันต้อง scan ทั้งตาราง แล้วเรียงลำดับใหม่ (แบบสุ่ม)

ยิ่งถ้าเอามารวมกันอีกนี่ยิ่งหนักครับ ...


ถ้าเป็นไปได้ เลิกใช้เถอะครับ
บันทึกการเข้า

THZHost SSD Hosting ไทย/สิงคโปร์ พร้อม firewall ป้องกันการยิงเว็บ + scan ไวรัสในเว็บ
aekarach
ก๊วนเสียว
*

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

กระทู้: 404



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 02 ตุลาคม 2012, 13:19:39 »

ผมเขียนสคริปทำอเมซอนครับ คิดว่าเกิน 100000 สินค้าแน่ๆ ขอบคุณครับ +1 ทั้ง 2 ท่านปล่อยตกเลยครับ

แล้วแต่เทคนิคนะครับ ตรงนี้มันเป็นเรื่องเทคในการเขียนโปรแกรม สิ่งสำคัญในการพัฒนาโปรแกรม ลองดูว่าเครื่องมือที่เราใช้นั้นสามารถทำอะไรได้บ้าง เราก็นำ Feature ตรงนี้แหละครับไปช่วยในการพัฒนา
บันทึกการเข้า

goweb
Newbie
*

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

กระทู้: 87



ดูรายละเอียด
« ตอบ #9 เมื่อ: 02 ตุลาคม 2012, 14:30:16 »

ไอ้ random นี่แหละครับตัวทำให้ช้า ไม่ว่าจะแยกหรือไม่แยก เพราะมันต้อง scan ทั้งตาราง แล้วเรียงลำดับใหม่ (แบบสุ่ม)

ยิ่งถ้าเอามารวมกันอีกนี่ยิ่งหนักครับ ...


ถ้าเป็นไปได้ เลิกใช้เถอะครับ
เห็นด้วยเป็นอย่างยิ่ง ^ ^
บันทึกการเข้า

ถ้าทำอะไรดีแล้ว คนมองว่าสร้างภาพ ก็ช่างเขา
อย่างน้อยเราก็ได้ทำดี ไม่เหมือนเขาที่แค่คิดดี
ยังไม่ได้ทำเลย... พระมหาวุฒิชัย (ว.วชิรเมธี)
สาธุ..
tctheworld
สมุนแก๊งเสียว
*

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

กระทู้: 608



ดูรายละเอียด
« ตอบ #10 เมื่อ: 02 ตุลาคม 2012, 21:04:24 »

หลายๆท่านก็ตอบไปแล้ว

ส่วนผมขอแนะนำการเิ่พิ่มความเร็วนะครับ

1.set index ในฐานข้อมูลที่เป็น unique
2.ให้ทำการ random ตัวเลขขึ้นมาชุดนึง แล้วค่อยมาทำ query โดยใช้ where id IN ($ran2, $ran3, $ran4, $ran5, $ran6, $ran7)
เพราะการใช้ order RAND() กับข้อมูลจำนวนมากจะมีผลทำให้ช้า

เลยตัดมาใช้แบบนี้รับรองเร็วขึ้นแน่ครับ
บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์