Мне нужно подготовить запрос из таблицы MySQL в PHP, используя подготовленный оператор, чтобы построить таблицу часов работы с часами на нескольких языках. Исходным языком является английский (т. Е. ru), поэтому, если для языка сеанса не существует значения (например, fr), тогда он должен вернуть резервный язык ru.PHP подготовить запрос MySQL для заполнения таблицы HTML
TABLE_A
id | att_id | item_id | lang | row | col | value
1 | 260 | 15 | en | 0 | 0 | Monday
2 | 260 | 15 | en | 0 | 1 | 10:30 - 15:00
3 | 260 | 15 | en | 0 | 2 | 18:30 - 24:00
4 | 260 | 15 | fr | 0 | 0 | Lundi
5 | 260 | 15 | fr | 0 | 1 | 10:30 - 15:00
6 | 260 | 15 | fr | 0 | 2 | 18:30 - 24:00
7 | 260 | 15 | en | 1 | 0 | Tuesday
8 | 260 | 15 | en | 1 | 1 | 10:30 - 15:00
9 | 260 | 15 | en | 1 | 2 | 18:30 - 24:00
10 | 260 | 15 | fr | 1 | 0 | Mardi
11 | 260 | 15 | fr | 1 | 1 | 10:30 - 15:00
12 | 260 | 15 | fr | 1 | 2 | 18:30 - 24:00
13 | 260 | 15 | en | 2 | 0 | Wednesday
14 | 260 | 15 | en | 2 | 1 | 10:30 - 15:00
15 | 260 | 15 | en | 2 | 2 | 18:30 - 24:00
16 | 260 | 13 | en | 0 | 0 | Monday
17 | 260 | 13 | en | 0 | 1 | 10:30 - 15:00
18 | 260 | 13 | en | 0 | 2 | 18:30 - 24:00
item_id является компания, так что я должен передать идентификатор компании, в данном случае 15, а att_id это поле, так что я должен пройти .
Для запасного языка я могу использовать COALESCE с JOIN на той же таблице.
Он работает, но возвращает двойные результаты и НЕ один. С COALESCE он должен вернуть первый результат NOT NULL.
Это выбор:
SELECT
TABLE_A.item_id, TABLE_A.row,
GROUP_CONCAT(TABLE_A.col) AS col, TABLE_A.value,
GROUP_CONCAT(COALESCE(
(
SELECT
TABLE_A.value FROM TABLE_A
WHERE
TABLE_A.item_id = '15' AND
TABLE_A.att_id = '260' AND
TABLE_A.row = T.row AND
TABLE_A.col = T.col AND
TABLE_A.langcode = 'fr'
),
(
SELECT
TABLE_A.value FROM TABLE_A
WHERE
TABLE_A.item_id = '15' AND
TABLE_A.att_id = '260' AND
TABLE_A.row = T.row AND
TABLE_A.col = T.col AND
TABLE_A.langcode = 'en'
)
)) AS name
FROM TABLE_A
JOIN TABLE_A AS T ON T.id = TABLE_A.id
WHERE TABLE_A.att_id = '260' AND TABLE_A.item_id = '15' GROUP BY TABLE_A.row
Если язык сеанса фр это результат:
[{"row":"0","col":"0,0,1,1,2,2","value":"Lundi,Lundi,10:30 - 15:00,10:30 - 15
:00,18:30 - 24:00,18:30 - 24:00"},{"row":"1","col":"0,0,1,1,2,2","value":"Mardi,Mardi,10
:30 - 15:00,10:30 - 15:00,18:30 - 24:00,18:30 - 24:00"},{"row":"2","col":"0,0,1,1,2,2","value":"Wednesday,
Wednesday,10:30 - 15:00,10:30 - 15:00,18:30 - 24:00,18:30 - 24:00"}]
Если язык сеанса ан это результат:
[{"row":"0","col":"0,0,1,1,2,2","value":"Monday,Monday,10:30 - 15:00,10:30 - 15
:00,18:30 - 24:00,18:30 - 24:00"},{"row":"1","col":"0,0,1,1,2,2","value":"Tuesday,Tuesday,10
:30 - 15:00,10:30 - 15:00,18:30 - 24:00,18:30 - 24:00"},{"row":"2","col":"0,0,1,1,2,2","value":"Wednesday,
Wednesday,10:30 - 15:00,10:30 - 15:00,18:30 - 24:00,18:30 - 24:00"}]
Что должен вернуться:
Если язык сеанса фр:
[{"row":"0","col":"0,1,2","value":"Lundi,10:30 - 15
:00,18:30 - 24:00"},{"row":"1","col":"0,1,2","value":"Mardi,10
:30 - 15:00,18:30 - 24:00"},{"row":"2","col":"0,1,2","value":"
Wednesday,10:30 - 15:00,18:30 - 24:00"}]
Если язык сеанса ан:
[{"row":"0","col":"0,1,2","value":"Monday,10:30 - 15
:00,18:30 - 24:00"},{"row":"1","col":"0,1,2","value":"Tuesday,10
:30 - 15:00,18:30 - 24:00"},{"row":"2","col":"0,1,2","value":"
Wednesday,10:30 - 15:00,18:30 - 24:00"}]
Что я делаю неправильно?
Учитывая, что вы разбираете массив в PHP anyaway, я просто не понимаю, почему вы беспокоить с group_concat – Strawberry
@Strawberry или как вы хотите группировать значение строки? с этим массивом быстро построить таблицу html с помощью explode, может быть, я ошибаюсь или есть другое решение, очищающее –
, вы должны применить условие на языке вашего SQL, привязав к языку сеанса (или 'en', если нет определены). Предоставьте свой PHP-код, который подходит для подготовки инструкции SQL и привязки аргументов. – trincot