Mysqli ที่ใช้ประโยค AS ไม่ทำงาน
ฉันมีสองตารางที่เข้าร่วม ทั้งสองมีคอลัมน์รหัส
$query ->select($db->quoteName(array(
'a.id',
'a.address_one',
'a.address_three',
'a.address_two',
'b.id AS myStuff',
'b.person_id'
'b.packages_id',
'b.payment_date',
)))
->from($db->quoteName('#__person','a')) ->join('INNER', $db->quoteName('#__licence', 'b') . ' ON (' . $db->quoteName('a.id') . ' = ' . $db->quoteName('b.person_id') . ')')
->where($db->quoteName('a.published') . ' = '. $db->quote('1'))
->where($db->quoteName('b.published') . ' = '. $db->quote('1'));
อย่างไรก็ตามประโยค AS ไม่ทำงานและแสดงข้อผิดพลาด
b
แบบสอบถามกลับมามี id AS myStuff
,
ค่อนข้างมากกว่า
b
. id
เป็น myStuff
ฉันได้ลองชุดค่าผสมทั้งหมดที่ฉันคิดได้สำหรับประโยคนี้ แต่ไม่ว่าฉันจะใช้อะไรก็ตามฉันได้รับข้อผิดพลาด
ใครช่วยบอกฉันว่ารูปแบบที่ถูกต้องสำหรับการใช้ประโยค AS ในแบบสอบถาม
อัปเดต
ฉันพบว่าถ้าฉันลบบรรทัด b.id AS แล้วเพิ่มแยกต่างหาก
$ query-> เลือก ('b.id AS myStuff');
แบบสอบถามใช้งานได้แม้ว่าเครื่องหมาย "จะหายไป ไม่แน่ใจว่าฉันพลาดวิธีอื่นในการจัดการทั้งหมดภายในข้อความค้นหาเดิมหรือไม่
คำตอบ
quoteName()
นามแฝงควรจะเป็นอาร์กิวเมนต์ที่สองที่จะ เมื่ออาร์กิวเมนต์แรกเป็นอาร์เรย์อาร์กิวเมนต์ที่สองควรเป็นอาร์เรย์ที่มีความยาวเท่ากัน null
สำหรับคอลัมน์โดยไม่ค่าคุณควรผ่าน ซึ่งดูไม่ดีในกรณีของคุณ:
$query ->select( $db->quoteName(
array(
'a.id',
'a.address_one',
'a.address_three',
'a.address_two',
'b.id',
'b.person_id',
'b.packages_id',
'b.payment_date',
),
array(
null,
null,
null,
null,
'myStuff',
null,
null,
null,
)
)
)
คุณสามารถแยกคอลัมน์ด้วยนามแฝงตามที่คุณได้กล่าวไปแล้ว หากคุณต้องการเก็บไว้ (ซึ่งในความเป็นจริงไม่จำเป็นเว้นแต่ว่าตัวระบุจะมีคำหลักที่สงวนไว้) ให้รวมไว้ในการquoteName()
เรียกแยกกัน:
$query->select( $db->quoteName(
array(
'a.id',
'a.address_one',
'a.address_three',
'a.address_two',
'b.person_id',
'b.packages_id',
'b.payment_date',
)
)
)
->select($db->quoteName('b.id', 'myStuff'));
โดยส่วนตัวแล้วฉันชอบส่งอาร์เรย์ของคอลัมน์ที่ยกมาทีละคอลัมน์ เขียนโค้ดได้มากกว่า แต่ยังอนุญาตให้ผสมคอลัมน์ที่มี / ไม่มีนามแฝงและนิพจน์ภายในการselect()
โทรครั้งเดียว และยังเร็วกว่าเนื่องจากวิธีการquoteName()
จัดการอาร์เรย์ในปัจจุบัน
$query->select(
array(
// Allows column without alias.
$db->quoteName('a.id'), // Allows column with alias. $db->quoteName('b.id', 'myStuff'),
// Allows expressions.
COUNT(*),
)
)