0

私はこのクエリに悩まされています。異なる構造を持つ異なるテーブルで単語を検索する必要があります。検索ボックスは 1 つしかなく、この 3 つのクエリを作成して、さまざまな場所で結果を見つけています。これらすべてを1つのクエリでまとめてフィルタリングするにはどうすればよいですか????

1) このクエリ (PHP から) で、テーブル "programas_videos" の内部結合を使用して、テーブル "videos" の説明、テーブル "PROGRAMAS" の名前、および説明に単語 "$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

わかった、

まず、次のように列に同じ名前を付ける必要があります。

使用する代わりに:

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異なるテーブルの行を区別できるように、フィールドを追加しました。

ans はいくつでも使用できますunionここで、完全なユニオン構文を見つけることができます

于 2013-10-11T18:24:06.767 に答える
0

グーグルで簡単に検索した後、サブクエリに関するこの記事、またはUNIONに関するこの記事を見つけることができました。

私の意見では、ユニオンを使用する必要がありますが、すべてのテーブルから同じ列を同じ順序で選択する必要があります。最後の選択肢として、サブクエリに頼る必要があります。

ところで。基本的な Web 開発の問題で今後参照できるように、 http://www.w3schools.comをブックマークしてください。

于 2013-10-11T18:17:14.087 に答える