0

我对这个查询很感兴趣。我需要在具有不同结构的不同表中搜索一个单词。我只有一个搜索框,我正在做这三个查询以在不同的地方查找结果。我怎样才能在一个查询中完成所有这些以过滤在一起????

1)在此查询(来自 PHP)中,我使用表“programas_videos”的内连接在表“视频”、名称和表“程序”的描述中搜索单词“$palabra_buscar”

SELECT * FROM videos 
                 INNER JOIN programas_videos ON videos.id_video = programas_videos.id_video 
                 INNER JOIN programas ON programas_videos.id_prog = programas.id_prog 
                 WHERE programas.nombre_prog LIKE "%'.$palabra_buscar.'%" 
                 OR programas.descrip_larga LIKE "%'.$palabra_buscar.'%" 
                 OR videos.descrip_larga LIKE "%'.$palabra_buscar.'%" 
                 GROUP BY videos.id_video DESC LIMIT 10

2)我有另一个查询是在另一个表中搜索一个单词

SELECT * FROM videos
                   INNER JOIN contenidos1 ON videos.metadata = contenidos1.id_metadata 
                   WHERE contenidos1.Title LIKE "%'.$palabra_buscar.'%"
                   OR contenidos1.Summary_Short LIKE "%'.$palabra_buscar.'%"
                   OR contenidos1.Summary_Long LIKE "%'.$palabra_buscar.'%"
                   OR contenidos1.Genre LIKE "%'.$palabra_buscar.'%" LIMIT 10

3)和这个查询

SELECT * FROM tableOfContents 
         WHERE tableOfContents .titulo LIKE "%'.$palabra_buscar.'%" 
         OR tableOfContents.descripcion LIKE "%'.$palabra_buscar.'%" 
         OR tableOfContents.categoria LIKE "%'.$palabra_buscar.'%" 
         GROUP BY tableOfContents.titulo  LIMIT 10
4

2 回答 2

0

在谷歌搜索之后,你可以找到这篇文章,关于子查询,或者这篇关于 UNION 的文章。

在我看来,您应该使用 Union,但您需要确保从所有表格中以相同的顺序选择相同的 COLUMNS。您应该将子查询作为最后的选择。

顺便提一句。您应该收藏http://www.w3schools.com以供将来在基本的 Web 开发问题中参考。

于 2013-10-11T18:17:14.087 回答
0

好的,

首先,您必须为您的列提供相同的名称,如下所示:

而不是使用:

SELECT * FROM videos  
SELECT * FROM tableOfContents

使用这样的东西:

SELECT name as col_name, title as col_title, image as col_image FROM videos
SELECT name as col_name, titlesss as col_title, imagesss as col_image FROM tableOfContents

您可以使用任何给定名称作为新列名。
这样,你就有了相同的列名,然后你可以像这样使用联合:

SELECT name as col_name, title as col_title, image as col_image, 'First_Table' as table_name FROM videos
INNER JOIN programas_videos ON videos.id_video = programas_videos.id_video 
INNER JOIN programas ON programas_videos.id_prog = programas.id_prog 
WHERE programas.nombre_prog LIKE "%'.$palabra_buscar.'%" 
OR programas.descrip_larga LIKE "%'.$palabra_buscar.'%" 
OR videos.descrip_larga LIKE "%'.$palabra_buscar.'%" 
GROUP BY videos.id_video DESC LIMIT 10
union
SELECT name as col_name, titlesss as col_title, imagesss as col_image, 'Second_Table' as table_name  FROM tableOfContents
WHERE tableOfContents .titulo LIKE "%'.$palabra_buscar.'%" 
OR tableOfContents.descripcion LIKE "%'.$palabra_buscar.'%" 
OR tableOfContents.categoria LIKE "%'.$palabra_buscar.'%" 
GROUP BY tableOfContents.titulo  LIMIT 10

我添加了table_name字段,以便您可以区分来自不同表的行。

您可以根据需要使用任意数量union的 s。 在这里你可以找到完整的联合语法

于 2013-10-11T18:24:06.767 回答