Ответ 1
Должно быть достаточно просто, просто сделайте что-то вроде этого:
$sql = "
SELECT Title, 1 FROM table1
UNION
SELECT Title, 2 FROM table2
UNION
SELECT Title, 3 FROM table3";
Я создаю RSS-канал в PHP, который использует данные из трех отдельных таблиц. Все таблицы относятся к страницам в разных областях сайта. У меня есть проблема с созданием полей ссылок в XML. Не зная, из какой таблицы вышла каждая запись, я не могу создать правильную ссылку на нее.
Есть ли способ решить эту проблему? Я попытался использовать mysql_fetch_field, но он вернул пустые значения для таблиц.
$sql = "
SELECT Title FROM table1
UNION
SELECT Title FROM table2
UNION
SELECT Title FROM table3";
Существуют и другие поля, но это в основном запрос, который я использую.
Любая помощь будет оценена.
Спасибо.
Должно быть достаточно просто, просто сделайте что-то вроде этого:
$sql = "
SELECT Title, 1 FROM table1
UNION
SELECT Title, 2 FROM table2
UNION
SELECT Title, 3 FROM table3";
Просто добавьте константу в список столбцов следующим образом:
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
.
Добавьте фиктивный столбец с постоянной шкалой. Например. "Выберите" funky_table "как source_table, название из funky_table" для каждого предложения, но с разными именами в кавычках.