AS yan tümcesini kullanan Mysqli çalışmıyor
Birleştirilmiş iki masam var. Her ikisinin de bir id sütunu vardır.
$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'));
Ancak AS yan tümcesi çalışmaz ve bir hata verir.
döndürülen sorgu vardır b
. id AS myStuff
,
ziyade
b
. id
MyStuff OLARAK,
Madde için aklıma gelen tüm kombinasyonları denedim ama ne kullanırsam kullanayım bir hata alıyorum.
Birisi bana sorguda AS cümlesini kullanmak için doğru biçimi söyleyebilir mi?
Güncelleme
Bu yüzden, b.id AS satırını kaldırırsam ve ardından ayrı bir
$ sorgu-> select ('b.id AS myStuff');
"işaretleri eksik olmasına rağmen sorgu çalışır. Orijinal sorguda tüm bunları ele almanın başka bir yolunu kaçırıp kaçırmadığımdan emin değilim.
Yanıtlar
Alias ikinci argüman olarak aktarılmalıdır quoteName()
. İlk argüman bir dizi olduğunda, ikinci argüman da aynı uzunlukta bir dizi olmalıdır. Değer içermeyen sütunlar için geçmelisiniz null
. Sizin durumunuzda iyi görünmeyen:
$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,
)
)
)
Daha önce de belirttiğiniz gibi sütunu takma adla ayırabilirsiniz. Alıntı halinde tutmak istiyorsanız (gerçekte tanımlayıcılar ayrılmış anahtar kelimeler içermedikçe gerekli değildir), ayrı bir quoteName()
çağrıya sarın :
$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'));
Kişisel olarak, tek tek alıntılanan sütunlardan oluşan bir diziyi iletmeyi tercih ederim. Yazılması daha fazla koddur, ancak aynı zamanda tek bir select()
çağrıda diğer adlar ve ifadeler içeren / içermeyen sütunların karıştırılmasına da izin verir . Ayrıca quoteName()
şu anda dizileri işleme biçimi nedeniyle daha hızlıdır .
$query->select(
array(
// Allows column without alias.
$db->quoteName('a.id'), // Allows column with alias. $db->quoteName('b.id', 'myStuff'),
// Allows expressions.
COUNT(*),
)
)