Извлечь из таблицы на основе значения префикса

0

Мне нужна помощь с инструкцией MYSQL с использованием PHP.

У меня есть следующие таблицы:

Table: app_main
Columns: id, eid

Table: app_equipment
Columns: id, name

Table: app_locations
Columns: id, name

Если значение, хранящееся в "eid" app_main, начинает таблицу, начинающуюся с префикса "e_", я хочу, чтобы идентификатор и имя были вытащены из таблицы app_equipment. Если значение хранится в "eid" таблицы app_main и начинается с префикса "l_", я хочу, чтобы идентификатор и имя были вытащены из таблицы app_locations. Я пытаюсь понять, как написать одно выражение mysql в php для этого.

Схема базы данных MySql

Таким образом, результаты будут: Оборудование 1 Местоположение 2 Расположение 3

Теги:

1 ответ

0

Один из подходов будет использовать два SELECT и объединить результаты с оператором set UNION ALL.

Спецификация не совсем ясна (пример данных и ожидаемый результат будут иметь большое значение для иллюстрации требований.)

Но мы могли бы сделать что-то вроде этого:

SELECT ee.id
     , ee.name
  FROM app_main em 
  JOIN app_equipment ee
    ON ee.id = em.id
 WHERE em.e_id LIKE 'e\_%' ESCAPE '\\'

 UNION ALL

SELECT ll.id
     , ll.name
  FROM app_main lm
  JOIN app_location ll
    ON ll.id = lm.id
 WHERE lm.e_id LIKE 'l\_%' ESCAPE '\\'

Это не лучший подход. Существуют и другие альтернативы для возвращения эквивалентных результатов; но без более определенной спецификации, мы просто догадываемся о том, что должно быть возвращено.

Обратите внимание, что для оператора UNION [ALL] требуется, чтобы каждый из SELECT возвращал одинаковое количество столбцов, а столбцы имеют одинаковые типы данных. Если определения столбцов id и name в таблице app_equipment отличаются от таблицы app_location, нам может потребоваться настроить запрос, чтобы он работал.

  • 0
    Обновил информацию
  • 0
    Я изменил SQL в ответе, поэтому условие в предложениях WHERE изменено с id LIKE на e_id LIKE

Ещё вопросы

Сообщество Overcoder
Наверх
Меню