Липсващи преводи и налични преводи към страница

Ticketa

Registered
Привет, имам следната (скромна) заявка:
SQL:
SELECT 
GROUP_CONCAT(DISTINCT l2.name ORDER BY l2.name ASC SEPARATOR ', ') AS available_languages,
COALESCE(
    GROUP_CONCAT(DISTINCT t.missing_language ORDER BY t.missing_language ASC SEPARATOR ', '),
    ''
) AS missing_languages
FROM posts p
LEFT JOIN posts_translate pt ON p.post_ID = pt.post_id 
INNER JOIN languages l2 ON pt.post_lang = l2.code
LEFT JOIN (
SELECT DISTINCT pt2.post_id, l3.name AS missing_language
FROM posts_translate pt2
CROSS JOIN languages l3
WHERE l3.code NOT IN (SELECT l4.code FROM languages l4 WHERE l4.code = pt2.post_lang)
) t ON pt.post_id = t.post_id
GROUP BY p.post_ID;


Чрез нея извеждам всички налични записи от `posts` и техните преводи в `posts_translate`

Проблема, е че се опитвам да покажа кои записи имат преводи и кои не. За цела трябва (би било хубаво, но не се сещам как) да проверя и кой е езика по подразбиране.

В момента имам следният output:
Код:
Array
(
[0] => Array
(
[available_languages] => Bulgarian, English
[missing_languages] => Bulgarian, English
)

[1] => Array
(
[available_languages] => Bulgarian, English
[missing_languages] => Bulgarian, English
)

[2] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[3] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[4] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[5] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[6] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[7] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[8] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[9] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

)

А трябва да изглежда:
Код:
Array
(
[0] => Array
(
[available_languages] => English, Bulgarian
[missing_languages] => NULL
)

[1] => Array
(
[available_languages] => English, Bulgarian
[missing_languages] => NULL
)

[2] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[3] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[4] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[5] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[6] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[7] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[8] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

[9] => Array
(
[available_languages] => English
[missing_languages] => Bulgarian
)

)


Като се има напредвид, че езика по подразбиране е English.
 
Открих си грешката, това е работещата заявка:
SQL:
SELECT *,
GROUP_CONCAT(DISTINCT l2.name ORDER BY l2.default ASC SEPARATOR ', ') AS available_languages,
GROUP_CONCAT(missing_language SEPARATOR ', ') AS missing_languages,
GROUP_CONCAT(DISTINCT l2.icon ORDER BY l2.default ASC SEPARATOR ' ') AS available_languages_icons
FROM posts_translate pt
INNER JOIN posts p ON pt.post_id = p.post_ID
LEFT JOIN (
SELECT
    DISTINCT pt2.post_id, l3.name AS missing_language
        FROM posts_translate pt2
            CROSS JOIN languages l3
            WHERE l3.code NOT IN (
            SELECT pt3.post_lang FROM posts_translate pt3 WHERE pt3.post_id = pt2.post_id
            )
        ) t ON pt.post_id = t.post_id
LEFT JOIN languages l2 ON pt.post_lang = l2.code
WHERE p.post_type = 'article'
GROUP BY pt.post_id

Може на някой да му бъде полезно.

Между другото, ако някой може да предложи друго решение по-добро от това, което направих съм отворен да поема критиката, тъй като търся възможно най-доброто решение :ROFLMAO:
 

Back
Горе