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-> select ('b.id как 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(*),
)
)