非常困难的SQL查询到一个(mysql)

时间:2013-10-11 18:02:36

标签: mysql sql database join

我已经堆满了这个查询。我需要在不同的表中搜索一个单词 结构。我只有一个搜索框,我正在制作这三个查询,以便在不同的地方找到结果。如何在一个查询中完成所有这些以一起过滤????

1)在这个QUERY中(从PHP)我搜索一个词“$ palabra_buscar”到表“视频”,名称和表格描述“程序”中使用表格的内部联接“programas_videos”< / p>

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

2 个答案:

答案 0 :(得分:0)

经过简短的谷歌搜索,你可以找到这个article,关于子查询,或者这个关于UNION的article

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

顺便说一下。您应该为http://www.w3schools.com添加书签,以便将来参考基本的Web开发问题。

答案 1 :(得分: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字段,因此您可以区分来自不同表的行。

您可以根据需要使用多个unionhere you can find the complete union syntax