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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: สอบถามเรื่อง SQL การ SELECT id

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

โดย AePongsak » 20/04/2018 5:05 pm

ขอบคุณครับ

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)) {

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

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

โดย AePongsak » 20/04/2018 4:56 pm

ก็ต้อง select ข้อมูลออกมาทั้งหมดก่อนอยู่ดีใช่ไหครับ

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

โดย AePongsak » 20/04/2018 4:53 pm

ขอบคุณครับ

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);

สอบถามเรื่อง 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); 

ข้างบน