ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับ

ตอบกระทู้

รูปแสดงอารมณ์
: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] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับ

Re: ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับ

โดย pond » 28/09/2016 4:06 pm

ได้แล้วครับ
วิธีเช็คว่า select แบบธรรมดาว่าทำถูกรึเปล่า ให้เอา query มา echo ก่อนที่จะรีเทริน มาดูก่อนครับ

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

echo $query->__toString();
แล้วเอา code นั้นไปลอง ในฐานข้อมูลดูว่าถูกรึเปล่าถ้าไม่ถูกให้ลองจากฐานข้อมูลให้ได้ตามต้องการก่อนแล้วค่อยมาใช้ใน joomla

ยกตัวอย่างจากโจทย์ ให้แสดง ชื่อคอม คอมมีกี่เวอร์ชั่น คอมกี่โดเมน *(ใช้ distinct หาชื่อที่ซ้ำ count หาว่ามีกี่ตัว)
แทน SELECT

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

$query->select('com_name,COUNT(DISTINCT(version)) as countversion,COUNT(DISTINCT(domain)) as countdomain');
แทน FROM

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

$query->from($db->qn('#__zzz_track', 'a'));
แทน GROUP BY

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

$query->group($db->qn('com_name'));

Re: ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับ

โดย tsukasaz » 27/09/2016 11:09 pm

1. แทนที่จะเขียน

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

$db->quoteName() 
เขียนสั้นๆ ได้ เปลี่ยนเป็น

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

$db->qn() 
2. อันนี้ผมงง :lol: น่าจะใช้ผิดนะ มันใช้เป็น ตัวแรก ชื่อคอลัมน์ ตัวที่สอง คือ ชื่อแทน (AS) http://www.w3schools.com/sql/sql_alias.asp

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

$query->group($db->quoteName('com_name','version')); 
ผลลัพท์ที่ได้คือ

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

GROUP BY com_name AS version
3. ลองเขียนแบบ sql ธรรมดา ให้ผ่านก่อน ค่อยมาแปลงเป็นแบบ Joomla ครับ

ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับ

โดย pond » 27/09/2016 8:29 pm

ลบกวนถามหน่อยครับ Joomla เรียกใช้ count ยังไงหรอครับคือตอนนี้ผม group by ได้อย่างเดียว แต่ไม่รู้จะเก็บตัวแปลไปใช้ฝั่ง view ยังไงครับช่วยทีครับเลยอยากรุ้ว่าเขียนแบบนี้ถูกมั้ยครับหรือควรปรับตรงไหนหรือมีข้อแนะนำดีๆ
นี่codeในส่วนของ model คับ

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

     protected function getListQuery() {
        $db = $this->getDbo();
        $query = $db->getQuery(true);
        $query->select( array('com_name', 'version','COUNT(*) as count_rec') );
        $query->from($db->quoteName('#__zzzz_track', 'a'));
        $query->group($db->quoteName('com_name','version'));

ข้างบน