В MySQL объедините запрос для получения имени столбца со вторым запросом к этому столбцу. - PullRequest
3 голосов
/ 13 ноября 2011

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

Например, я хочу найти "fool = true".В первой таблице я обнаружил, что значения для «дурак» находятся в столбце 1 второй таблицы.Во второй таблице я выполняю поиск real для «field_id_1 = true».

Эта таблица отображает имена в идентификаторы столбцов, используемые во второй таблице.

exp_channel_fields
+field_id +field_name +
|---------|-----------|
|1        |fool       |
|2        |money      |
+---------+-----------|

В этой таблице есть данные, которые я хочу найти, но имена столбцов не совсем соответствуют идентификатору из предыдущего шага.Мне нужно добавить «field_id_» к идентификатору, который я нашел ранее:

exp_channel_data
+entry_id+field_id_1 +field_id_2 +
|--------|-----------|-----------|
|837     |true       |$500       |
|838     |false      |$50,000    |
+--------+-----------+-----------+

Вот первый запрос, который я использую, и я сохраняю результат в $ myFieldID.

SELECT field_id as tField_id FROM exp_channel_fields 
WHERE field_name = 'fool'

Затем яиспользуйте результат для построения второго запроса:

SELECT
    GROUP_CONCAT(entry_id ORDER BY entry_id SEPARATOR '|')
    AS result_entries
FROM exp_channel_data
WHERE field_id_{$myFieldID} = "true"

Есть ли способ объединить их в один запрос?Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

невозможно использовать результаты запроса в качестве имен столбцов, но вы можете использовать подготовленные операторы на стороне сервера для достижения аналогичного поведения.взгляните на этот вопрос:

MySQL concat () для создания имен столбцов для использования в запросе?

0 голосов
/ 13 ноября 2011

Ваша база данных неверно нормализована.Вы должны разворачивать столбцы в строки, чтобы выполнить такие запросы:

exp_channel_fields
+field_id +field_name +
|---------|-----------|
|1        |fool       |
|2        |money      |
+---------+-----------|


exp_channel_data
+entry_id+field_id + value
|--------|-----------|-----------|
|837     |1          |true       |
|837     |2          |$500       |
|838     |1          |False      |
|838     |2          |$50,000    |
+--------+-----------+-----------+

Тогда запрос действительно прост:

ВЫБРАТЬ field_id как tField_id ОТ exp_channel_fields WHERE field_name = 'fool'

SELECT
    GROUP_CONCAT(entry_id ORDER BY entry_id SEPARATOR '|')
    AS result_entries
FROM 
   exp_channel_data inner join 
   exp_channel_fields 
     on exp_channel_data.field_id = exp_channel_data.field_id
WHERE value = "true"

Возможно, вам понадобятся таблица-таблица и вложенные таблицы для exp_channel_fields, потому что типы значений различаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...