Подтвердить что ты не робот

SQL - идентификация исходной таблицы из запроса UNION

Я создаю RSS-канал в PHP, который использует данные из трех отдельных таблиц. Все таблицы относятся к страницам в разных областях сайта. У меня есть проблема с созданием полей ссылок в XML. Не зная, из какой таблицы вышла каждая запись, я не могу создать правильную ссылку на нее.

Есть ли способ решить эту проблему? Я попытался использовать mysql_fetch_field, но он вернул пустые значения для таблиц.

$sql = "
SELECT Title FROM table1
UNION 
SELECT Title FROM table2
UNION 
SELECT Title FROM table3";

Существуют и другие поля, но это в основном запрос, который я использую.

Любая помощь будет оценена.

Спасибо.

4b9b3361

Ответ 1

Должно быть достаточно просто, просто сделайте что-то вроде этого:

$sql = "
SELECT Title, 1 FROM table1
UNION 
SELECT Title, 2 FROM table2
UNION 
SELECT Title, 3 FROM table3";

Ответ 2

Просто добавьте константу в список столбцов следующим образом:

select 'table1' as table_name, title from table1
union all
select 'table2' as table_name, title from table2
union all
select 'table3' as table_name, title from table3

который доставит вам что-то вроде:

table_name | title
-----------+-----------------------------
table1     | war and peace
table2     | 1984
table3     | terminator salvation

и т.д.

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

Обратите внимание на использование union all - если вы уверены, что из таблиц не будет повторяющихся строк (что, вероятно, верно в этом случае, так как у вас есть другое значение table_name для каждого, и я предполагаю названия уникальны), union all может избежать расточительной операции сортировки и удаления-дублирования. Использование union само по себе может привести к ненужной работе.

Если вы хотите удалить дубликат, просто вернитесь к использованию union.

Ответ 3

Добавьте фиктивный столбец с постоянной шкалой. Например. "Выберите" funky_table "как source_table, название из funky_table" для каждого предложения, но с разными именами в кавычках.