AS 절을 사용하는 MySQLi가 작동하지 않습니다.

Aug 18 2020

조인 된 두 개의 테이블이 있습니다. 둘 다 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'));

그러나 AS 절이 작동하지 않고 오류가 발생합니다.

반환 된 쿼리에는 b. id AS myStuff,

보다는

b. idmyStuff로

절에 대해 생각할 수있는 모든 조합을 시도했지만 무엇을 사용하더라도 오류가 발생합니다.

누군가 쿼리에서 AS 절을 사용하기위한 올바른 형식을 말해 줄 수 있습니까?

최신 정보

그래서 b.id AS 줄을 제거한 다음 별도의

$ query-> select ( 'b.id AS myStuff');

`마크가 없어도 쿼리가 작동합니다. 원래 쿼리 내에서 모든 문제를 해결하는 다른 방법을 놓치고 있는지 확실하지 않습니다.

답변

2 Sharky Aug 18 2020 at 21:29

별칭은에 두 번째 인수로 전달되어야합니다 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(*),
    )
)