Mysqli menggunakan klausa AS tidak berfungsi
Saya memiliki dua tabel yang digabungkan. Keduanya memiliki kolom id.
$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'));
Namun klausa AS tidak berfungsi dan menimbulkan kesalahan.
kueri yang dikembalikan memiliki b
. id AS myStuff
,
daripada
b
. id
SEBAGAI myStuff,
Saya telah mencoba semua kombinasi yang dapat saya pikirkan untuk klausa tersebut, tetapi apa pun yang saya gunakan, saya mendapatkan kesalahan.
Dapatkah seseorang memberi tahu saya bahwa format yang benar untuk menggunakan klausa AS dalam kueri?
Memperbarui
Jadi saya telah menemukan bahwa jika saya menghapus baris b.id AS dan kemudian menambahkan
$ query-> pilih ('b.id AS myStuff');
kueri berfungsi meskipun tanda `hilang. Tidak yakin apakah saya kehilangan cara lain untuk menangani semuanya dalam kueri asli.
Jawaban
Alias harus diberikan sebagai argumen kedua ke quoteName()
. Jika argumen pertama adalah larik, argumen kedua juga harus berupa larik dengan panjang yang sama. Untuk kolom tanpa nilai yang harus Anda lewati null
. Yang tidak terlihat bagus dalam kasus Anda:
$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,
)
)
)
Anda dapat membagi kolom dengan alias seperti yang telah Anda sebutkan. Jika Anda ingin membuatnya tetap dikutip (yang pada kenyataannya tidak diperlukan kecuali pengenal berisi kata kunci yang dipesan), cukup gabungkan dalam quoteName()
panggilan terpisah :
$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'));
Secara pribadi saya lebih suka melewatkan array kolom yang dikutip secara individual. Lebih banyak kode untuk ditulis tetapi juga memungkinkan pencampuran kolom dengan / tanpa alias dan ekspresi di dalam select()
panggilan tunggal . Dan itu juga lebih cepat karena cara quoteName()
menangani array saat ini.
$query->select(
array(
// Allows column without alias.
$db->quoteName('a.id'), // Allows column with alias. $db->quoteName('b.id', 'myStuff'),
// Allows expressions.
COUNT(*),
)
)