MySQL / Поиск в двух таблицах - PullRequest
0 голосов
/ 01 октября 2011

У меня есть две таблицы: «фото» и «видео».Вместе они почти идентичны, за исключением одного столбца, «photoID» в «photos» и «videoID» в «videos».

Когда пользователь выполняет поиск, я бы хотел, чтобы результаты видео смешивались срезультаты фотографии, очевидно из одного набора записей.

Как это можно сделать, используя разные имена столбцов?Если это не так, могу ли я изменить имена столбцов на что-то вроде contentID в обеих таблицах и использовать UNION для их объединения?Изменение столбцов - большая работа, но придется, если это невозможно ...

Ответы [ 5 ]

5 голосов
/ 01 октября 2011

Вам не нужно менять имена столбцов в таблицах. Просто используйте псевдоним на SELECT. Я бы выбрал UNION ALL (более эффективный, чем UNION, поскольку он не будет пытаться устранить дубликаты), и добавил бы дополнительный столбец, чтобы определить, откуда пришел контент.

SELECT photoID AS contentID, colA, colB, ..., 'photo' AS ContentType
    FROM photos
UNION ALL
SELECT videoID AS contentID, colA, colB, ..., 'video' AS ContentType
    FROM videos
1 голос
/ 01 октября 2011

Если вы хотите создать объединение без отображения photoID и videoID, вы можете сделать это следующим образом:

SELECT column names from Videos 
UNION
SELECT column names from Photos
1 голос
/ 01 октября 2011
select column1, column2, NULL videoID, photoID 
from photos
where criteria = 'criteria'

union all

select column1, column2, videoID, NULL photoID 
from videos
where criteria = 'criteria'
1 голос
/ 01 октября 2011

используйте что-то похожее на

select photoID AS ContentID, col1, col2 FROM PHOTOS WHERE col1 =...
UNION
select videoID AS ContentID, col1, col2 FROM VIDEOS WHERE col1 =...
1 голос
/ 01 октября 2011
Select * from
(
SELECT VideoID as MediaID, * FROM Videos
UNION
SELECT PhotoID as MediaID, * FROM Photos
) as T
WHERE MediaID = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...