สอบถามการนำคำสั่งsql มาใช้ใน php

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

Moderator: mindphp

ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

สอบถามการนำคำสั่งsql มาใช้ใน php

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

SQL - Database-1.png
SQL - Database-1.png (101.28 KiB) Viewed 1477 times
จากฐานข้อมูลนี้ ทำการคิวรี่ด้วยคำสั่ง

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

SELECT DISTINCT keyword FROM  suggest_search
WHERE  keyword LIKE '%%' AND user_id = 2
ORDER BY  id DESC;

ผลลัพธ์ที่ได้
SQL - Database-2.png
SQL - Database-2.png (40.02 KiB) Viewed 1477 times
ตรงตามที่ต้องการ

แต่เมื่อนำไปใช้ในโค้ด php

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

$user_id = $this->user->data['user_id'];
        //query คำที่ใกล้เคียงกับคำค้นหา
        

        $sql= " SELECT  DISTINCT  keyword FROM  suggest_search "
                . "WHERE keyword LIKE '%$keyword%' AND user_id = ".$user_id
                . " ORDER BY  id DESC ";

        
        //echo $sql.'<br><br>';
        $result = $db->sql_query($sql);
        $keyword_arr =  array();
        while($row = $result->fetch_assoc()) {
             array_push($keyword_arr,$row['keyword']);
             echo " ".$row['keyword']."<hr>";
         }
ผลลัพธ์ที่แสดงออกมา ไม่ตรงกับ ที่ได้คิวรี่ไป
SQL - Database-1.png
SQL - Database-1.png (28.46 KiB) Viewed 1477 times
ซึ่งไม่ตรงกับที่ไปคิวรี่ใน phpmyadmin อยากสอบถามว่าเกิดจากอะไร และจะแก้ได้อย่างไร
แก้ไขล่าสุดโดย WKsoft เมื่อ 27/01/2022 11:40 am, แก้ไขไปแล้ว 1 ครั้ง.
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41243
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามการนำคำสั่ัง sql มาใช้ใน php

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

ควรนับแถวข้อมูลก่อนว่ามีข้อมูลมาจากการ query ก่อน fetch

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

if ($result->num_rows > 0) {
// TO fetch and as to array 
}
เปลี่น

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

array_push($keyword_arr,$row['keyword']);
เป็น

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

$keyword_arr[] = $row['keyword'];
หรือ ถ้าจะเอา id มาทำ key ของ array ด้วย

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

$keyword_arr[$row['id']] = $row['keyword'];
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Re: สอบถามการนำคำสั่ัง sql มาใช้ใน php

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

ครับจะนำไปปรับแก้ครับ

ส่วนที่สอบถามไปมีวิธีแก้รึเปล่าครับ
เพราะว่าใส่คำสั่ง เดียวกันที่คิวรี่ใน phpmyadmin เลย แต่พอเอามาคิวรี่ใน โค้ด php แล้วมันแสดงผลลัพธ์ไม่ตรงกัน
ภาพประจำตัวสมาชิก
eange08
PHP VIP Members
PHP VIP Members
โพสต์: 16193
ลงทะเบียนเมื่อ: 22/12/2020 10:09 am

Re: สอบถามการนำคำสั่ัง sql มาใช้ใน php

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

WKsoft เขียน: 27/01/2022 11:54 am ครับจะนำไปปรับแก้ครับ

ส่วนที่สอบถามไปมีวิธีแก้รึเปล่าครับ
เพราะว่าใส่คำสั่ง เดียวกันที่คิวรี่ใน phpmyadmin เลย แต่พอเอามาคิวรี่ใน โค้ด php แล้วมันแสดงผลลัพธ์ไม่ตรงกัน
เป็นที่เราใช้คำสั่ง array_push นอกจากจะเป็นการเพิ่มค่าใน array แล้ว มันจะช่วยเรียงค่ามากไปน้อยใน array ให้อีกด้วย

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

array_push($keyword_arr,$row['keyword']);
ต้องเป็นการเก็บค่า array ตามคำแนะนำข้างต้นดูค่ะ
ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

ได้ลองไปแก้ไขโค้กแล้วครับ แต่ก็ยังแสดงผลได้ ไม่ตามที่ต้องการ

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

$user_id = $this->user->data['user_id'];        

        $sql= " SELECT  DISTINCT  keyword FROM  phpbb_m_suggest_search "
                . "WHERE keyword LIKE '%$keyword%' AND user_id = ".$user_id
                . " ORDER BY  id DESC ";

        $result = $db->sql_query($sql);
        if ($result->num_rows > 0) {
            echo "จำนวนแถว : ".$result->num_rows."<hr>" ;
        }

        $keyword_arr =  array();
        while($row = $result->fetch_assoc()) {
            $keyword_arr[] = $row['keyword'];
            echo " ".$row['keyword']."<hr>";
         }
         $result->free_result();
ผลที่ได้
SQL - Database-1.png
SQL - Database-1.png (25.33 KiB) Viewed 1450 times
ผลที่ต้องการให้แสดง ลำดับการแสดงผลเรียงแบบนี้
SQL - Database-2.png
SQL - Database-2.png (40.26 KiB) Viewed 1450 times
ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

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

$sql_array = array(
            'SELECT' => ' DISTINCT a.keyword',
            'FROM' => array(
               'phpbb_m_suggest_search' => 'a',
            ),
            'WHERE' => ' a.keyword LIKE '."'%".$keyword."%' ".' AND a.user_id = '.$user_id ,

            'ORDER_BY' => ' a.id DESC' ,
        );
$sql = $db->sql_build_query('SELECT', $sql_array);

$result =  $this->db->sql_query($sql);     
ลองเปลี่ยนรูปแบบมาใช้แบบของ phpbb แต่ก็แสดงผลลัพธ์ได้ไม่ถูกต้อง
SQL - Database-1.png
SQL - Database-1.png (37.25 KiB) Viewed 1406 times
ผลลัพธ์ที่ถูกต้อง ที่ต้องการให้แสดงตามลำดับ
SQL - Database-1.png
SQL - Database-1.png (64.86 KiB) Viewed 1406 times
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41243
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

คำว่า จำนวน 12 แถว
มาจากไหน ขอดูโค้ด ตอน fetch ออกมาแสดงหน่อย
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

mindphp เขียน: 31/01/2022 10:15 am คำว่า จำนวน 12 แถว
มาจากไหน ขอดูโค้ด ตอน fetch ออกมาแสดงหน่อย

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

 public function search_show_keyword($keyword) {
        
        global  $db;
        $user_id = $this->user->data['user_id'];
        //query คำที่ใกล้เคียงกับคำค้นหา

        $sql_array = array(
            'SELECT' => ' DISTINCT a.keyword',
            'FROM' => array(
               'phpbb_m_suggest_search' => 'a',
            ),
            'WHERE' => ' a.keyword LIKE '."'%".$keyword."%' ".' AND a.user_id = '.$user_id ,

            'ORDER_BY' => ' a.id DESC' ,
        );
        $sql = $db->sql_build_query('SELECT', $sql_array);
    
        $result =  $this->db->sql_query($sql);     
        echo "&emsp;&emsp;&emsp;&emsp;".$sql.'<br><br>';

        if ($result->num_rows > 0) {
            echo "&emsp;&emsp;&emsp;&emsp;จำนวนแถว : ".$result->num_rows."<hr>" ;
        }

        $keyword_arr =  array();
        
        while($row = $result->fetch_assoc()) {
            $keyword_arr[] = $row['keyword'];
            echo "&emsp;&emsp;&emsp;&emsp;".$row['keyword']."<hr>";

         }
         $result->free_result();
         return  $keyword_arr;
    }
ส่วนคำสั่ง คิวรี่ ใช้คำสั่งเดียวกันเลย ต่างกันที่คิวรี่ใน phpMyAdmin กับ คิวรี่โดยผ่าน โค้ด php
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41243
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

ถ้าจะเอา id ด้วยลองทบทวน ตามคำแนะนำนี้
viewtopic.php?p=238312#p238312

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

if ($result->num_rows > 0) {
ควรครอบทั้งหมด ถ้าไม่มีแถวข้อมูลก็ไม่ต้อง fetch
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
WKsoft
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 872
ลงทะเบียนเมื่อ: 30/11/2021 9:35 am

Re: สอบถามการนำคำสั่งsql มาใช้ใน php

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

WKsoft เขียน: 31/01/2022 10:01 am

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

 public function search_show_keyword($keyword) {
        
        global  $db;
        $user_id = $this->user->data['user_id'];
        //query คำที่ใกล้เคียงกับคำค้นหา

        $sql_array = array(
            'SELECT' => ' DISTINCT a.keyword',
            'FROM' => array(
               'phpbb_m_suggest_search' => 'a',
            ),
            'WHERE' => ' a.keyword LIKE '."'%".$keyword."%' ".' AND a.user_id = '.$user_id ,

            'ORDER_BY' => ' a.id DESC' ,
        );
        $sql = $db->sql_build_query('SELECT', $sql_array);
    
        $result =  $this->db->sql_query($sql);     
        echo "&emsp;&emsp;&emsp;&emsp;".$sql.'<br><br>';

        if ($result->num_rows > 0) {
            echo "&emsp;&emsp;&emsp;&emsp;จำนวนแถว : ".$result->num_rows."<hr>" ;
        }

        $keyword_arr =  array();
        
        while($row = $result->fetch_assoc()) {
            $keyword_arr[] = $row['keyword'];
            echo "&emsp;&emsp;&emsp;&emsp;".$row['keyword']."<hr>";

         }
         $result->free_result();
         return  $keyword_arr;
    }
ส่วนคำสั่ง คิวรี่ ใช้คำสั่งเดียวกันเลย ต่างกันที่คิวรี่ใน phpMyAdmin กับ คิวรี่โดยผ่าน โค้ด php
แก้ได้แล้วครับ

แก้ไขโค้ดส่วนนี้

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

$result =  $this->db->sql_query($sql);   
เป็น

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

 $result =  $this->db->sql_query_limit($sql,5,0); 
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

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

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