Как я могу получать поля, не переведенные в Mysql?

Я пробую выбирать поля, которые не переведены, но не могу находить способ это делать.

Languages Table

+---------------+---------------+
| language_name | language_code |
+---------------+---------------+
| English       | en            |
| Español       | es            |
| Italiano      | it            |
+---------------+---------------+

Статус Table

+-----------+
| status_id |
+-----------+
| 1         |
| 2         |
+-----------+

Translation Статус Table

+-----------+---------+---------+---------+----+
| tr_status_id | tr_status_translate | tr_lang |
+-----------+---------+---------+---------+----+
| 1            | for rent            | en      |
| 2            | for sale            | en      |
| 1            | alquiler            | es      |
+-----------+---------+---------+---------+----+

Mysql Query

SELECT languages.*, tr_ptstatus.* 
FROM languages, tr_ptstatus 
WHERE languages.language_code NOT IN (
    SELECT tr_lang FROM tr_ptstatus
) 
GROUP BY language_code

Например, в таблице tr_ptstatus еще он не готов перевести for выходит в испанский язык и в итальянца.

Результат, который я хочу получить на экране:

for засолите is not translated to Испанский язык for засолите is not translated to Итальянский язык for rent is not translated to Итальянский

2
задан 23.12.2019, 17:07
1 ответ

Давайте получать количество языков:

select count(*) from Languages 

И сейчас, давайте считать реестры в translation_status, счет которой меньше, чем это:

select tr_status_id , count(*) 
from translation_status 
group by tr_status_id 
having count(*) < (select count(*) from languages)

Это будет возвращать нам список tr_status_id, который они не переведены на все языки. сейчас чтобы знать, что языки не, он осложнен, потому что мы должны изобретать реестры, так как мы знаем, в которых они находятся, но не в которых они не.

, Так что то, что мы сделаем, является списком всех языков, и объединим из-за правой стороны предыдущий query, и остаемся одиноким с реестрами, которые у них есть tr_status_translate пусто...

select language_code, tr_status_id, tr_status_translate 
from Languages left join translation_status as status ON tr_lang = language_code
where
    tr_status_id in (select tr_status_id 
                    from translation_status 
                    group by tr_status_id 
                    having count(*) < (select count(*) from languages)
    and
        length(tr_status_translate) = 0

ЗАМЕЧАЕТ: это досталось руку и не проверено.

0
ответ дан 23.12.2019, 22:06
  • 1
    ok dé jame читать это и понимать хорошо то, что ты сделал, и потом это протестирует, если оно функционирует так, я изучаю. – anonfidusa 23.12.2019, 17:24
  • 2
    я это протестировал, но оно я не функционирует. – anonfidusa 23.12.2019, 17:50
  • 3
    и с небольшой информацией я могу делать мало., что является тем, что не функционирует? – gbianchi♦ 23.12.2019, 17:52
  • 4
    не, что ты нуждаешься в информации, это все то, что есть, в любом случае, ты можешь объяснять мне, что то, что делает этой линией точно (from Languages left join translation_status схвати статус) ТУЗ статус, ты распределяешь, но это не используешь или я неправильный? – anonfidusa 23.12.2019, 17:55
  • 5
    точный. я это не использую. как и ошибка бросает, или что он способствует тому, чтобы оно не функционировало? – gbianchi♦ 23.12.2019, 18:15