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

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

Moderator: mindphp

AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 4996
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย AePongsak »

ตอนนี้เขียน 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
โพสต์: 21911
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย tsukasaz »

- ตั้งตัวแปรมาเก็บจำนวนแถวทั้งหมด
- ตั้งตัวแปรมาเก็บจำนวนรอบที่จะวน 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
โพสต์: 4996
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย AePongsak »

ขอบคุณครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.
AePongsak
PHP VIP Members
PHP VIP Members
โพสต์: 4996
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย AePongsak »

ก็ต้อง select ข้อมูลออกมาทั้งหมดก่อนอยู่ดีใช่ไหครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.
ภาพประจำตัวสมาชิก
thatsawan
PHP VIP Members
PHP VIP Members
โพสต์: 28508
ลงทะเบียนเมื่อ: 31/03/2014 10:02 am
ติดต่อ:

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

โพสต์ที่ยังไม่ได้อ่าน โดย thatsawan »

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

$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
โพสต์: 4996
ลงทะเบียนเมื่อ: 17/09/2016 10:09 am

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

โพสต์ที่ยังไม่ได้อ่าน โดย AePongsak »

ขอบคุณครับ
รูปภาพ
ξν℮ry story has an end but in life every end is a neω ßeginning.
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

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

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 31