สอบถามเรื่อง SQL การ SELECT id

เกี่ยวกับ ปัญหาการใช้งาน การติดตั้ง ฐานข้อมูล MySql Oracle MSSQL ect...
การเขียน คำสั่ง SQL เพื่อดึกข้อมูล บอร์ดนี้ควรระบุโครงสร้างตารางของท่านในคำถามด้วยนะ

Moderator: mindphp

ภาพประจำตัวสมาชิก
AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 3737
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย AePongsak » 20/04/2018 4:21 pm

ตอนนี้เขียน phpBB ต้องการสอบถามเกี่ยวกับการ Select ข้อมูลโดยแบ่ง Select ที่ละละน้อยโดยไม่ Select มาทั้งหมดเพราะจะทำให้ดึงข้อมูลช้าและค้าง

สมมุติว่ามีข้อมูล user_id จำนวน 50,000
ต้องการ Select ทีละ 10,000 เพื่อเอาไปคิด เมื่อคำนวนเสร็จแล้วให้กลับมา Select ต่อจากข้อมูลเดิมคือ 10,001 ทำไปเรื่อยจนกว่าจะหมดครับ

ตอนนี้แค่ Select count มาทั้งหมดแต่ไม่รู้ว่าจะทำยังไงต่อ

โค้ด: เลือกทั้งหมด

      $sql_array = array(
              
'SELECT' => 'COUNT(u.user_id) AS id, u.username AS username, u.user_password AS password, g.pf_telnumber AS telnumber',
              
'FROM' => array(
                      
USERS_TABLE => 'u',
              ),
              
'LEFT_JOIN' => array(
                      array(
                              
'FROM' => array(PROFILE_FIELDS_DATA_TABLE => 'g'),
                              
'ON' => 'g.user_id = u.user_id',
                      )
              ),
              
'WHERE' => "g.pf_telnumber != ' ' ",
      );

$sql $this->db->sql_build_query('SELECT'$sql_array);
$result $this->db->sql_query($sql);
$user_count = (int) $this->db->sql_fetchfield('id'); //นับ ID จากตาราง USERS_TABLE
$this->db->sql_freeresult($result);
      
print_r($user_count); 
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.

ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 7498
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย tsukasaz » 20/04/2018 4:51 pm

- ตั้งตัวแปรมาเก็บจำนวนแถวทั้งหมด
- ตั้งตัวแปรมาเก็บจำนวนรอบที่จะวน Loop โดย เอาจำนวนทั้งหมด หาร จำนวนต่อรอบ เช่น ข้อมูล 5000 แถว ดึงข้อมูล 1000 แถวต่อรอบ เท่ากับ 5000 / 1000
- ใช้คำสั่ง ceil เพื่อให้มันปัดเศษขึ้น อาจจะเขียน ceil(5000 / 1000)
- ตั้ง for loop มา ตัวอย่าง for($i = 0; $i < จำนวนรอบที่จะวน; $i++)
- เปลี่ยนจาก $result = $this->db->sql_query($sql); เป็น $result = $db->sql_query_limit($sql, 1000, $i * 1000);
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

ภาพประจำตัวสมาชิก
AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 3737
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

Re: สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย AePongsak » 20/04/2018 4:53 pm

ขอบคุณครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.

ภาพประจำตัวสมาชิก
AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 3737
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

Re: สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย AePongsak » 20/04/2018 4:56 pm

ก็ต้อง select ข้อมูลออกมาทั้งหมดก่อนอยู่ดีใช่ไหครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.

ภาพประจำตัวสมาชิก
thatsawan
PHP VIP Members
PHP VIP Members
โพสต์: 11251
ลงทะเบียนเมื่อ: 31/03/2014 10:02 am
ติดต่อ:

Re: สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย thatsawan » 20/04/2018 5:02 pm

โค้ด: เลือกทั้งหมด

$total_topics = 200000; #select ค่ามาให้รู้ว่ามีเท่าไหร่

        $per_page = 100; #จำนวนรอบที่จะเเบ่ง
        $total = ceil($total_topics / $per_page); #หาร

        for ($x = 1; $x <= $total; $x++) {
          
            $start 
= ($x - 1) * $per_page;
            $sql = 'SELECT topic_id,forum_id,topic_last_post_time,topic_time
                     FROM '
 . TOPICS_TABLE . ' ORDER BY topic_id DESC';
            $result = $this->db->sql_query_limit($sql, $per_page, $start);

       

            while 
($row = $this->db->sql_fetchrow($result)) {

             //คำสั่ง...
            }
            }

ภาพประจำตัวสมาชิก
AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 3737
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

Re: สอบถามเรื่อง SQL การ SELECT id

โพสต์โดย AePongsak » 20/04/2018 5:05 pm

ขอบคุณครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.


  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 8 และ บุคคลทั่วไป 0 ท่าน