2016-05-11 11 views
3

参加します。検索タグなしで、私は3つのテーブルを持っている

id, name , mod_name , picture , hits.

フィールドが存在したかったところ、例えば、カンマで区切られている:

Car , truck , SUV , bike 

Field: "tag"

テーブルは、私が必要とする分野はほぼ同一であり、

FIND_IN_SET試行がありましたが、 ""ではなく、データベース内のエントリ。

私がこれまで試してみました何:

SELECT id, name, mod_name, picture, hits from link_art_a 
    UNION ALL 
    SELECT id, name, mod_name, picture, hits from link_art_b 
    UNION ALL 
    SELECT id, name, mod_name, picture, hits from link_art_c 
    where 
    find_in_field('Car', tag) > 0 order by name asc 

は、誰もが私は望ましい結果を取得する方法のアイデアを持っていますか?

編集: こんにちは、

問題は、私は、このような「車」などの所望の単語が含まれていないものも含め、すべてのレコードを取得することです。

MySQLのダンプ:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET AUTOCOMMIT = 0; 
START TRANSACTION; 
SET time_zone = "+00:00"; 

CREATE TABLE `link_art_a` (
    `id` bigint(20) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `mod_name` varchar(200) NOT NULL, 
    `picture` varchar(100) NOT NULL, 
    `hits` bigint(20) NOT NULL, 
    `tag` varchar(250) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO `link_art_a` (`id`, `name`, `mod_name`, `picture`, `hits`, `tag`) VALUES 
(1, 'A8', 'a8.html', 'default.jpg', 251, 'car,sports car,sport,fast'), 
(2, 'VW Beetle', 'vw-beetle', 'default.jpg', 269, 'car,fun,slow'); 

CREATE TABLE `link_art_b` (
    `id` bigint(20) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `mod_name` varchar(200) NOT NULL, 
    `picture` varchar(100) NOT NULL, 
    `hits` bigint(20) NOT NULL, 
    `tag` varchar(250) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO `link_art_b` (`id`, `name`, `mod_name`, `picture`, `hits`, `tag`) VALUES 
(1, 'Surfboard', 'surfboard', 'default.jpg', 142, 'fun,sport,water'), 
(2, 'Sport boat', 'sport-boat', 'default.jog', 163, 'sport,fun,water,fast'); 

CREATE TABLE `link_art_c` (
    `id` bigint(20) NOT NULL, 
    `name` varchar(100) NOT NULL, 
    `mod_name` varchar(200) NOT NULL, 
    `picture` varchar(100) NOT NULL, 
    `hits` bigint(20) NOT NULL, 
    `tag` varchar(250) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO `link_art_c` (`id`, `name`, `mod_name`, `picture`, `hits`, `tag`) VALUES 
(1, 'Houseboat', 'houseboat', 'default.jog', 144, 'house,boat,water'), 
(2, 'Speedboat', 'speedboat', 'default.jpg', 142, 'water,boot,speed,fast'); 


ALTER TABLE `link_art_a` ADD PRIMARY KEY (`id`), ADD KEY `tag` (`tag`); 
ALTER TABLE `link_art_b` ADD PRIMARY KEY (`id`), ADD KEY `tag` (`tag`); 
ALTER TABLE `link_art_c` ADD PRIMARY KEY (`id`), ADD KEY `tag` (`tag`); 


ALTER TABLE `link_art_a` 
    MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; 
ALTER TABLE `link_art_b` 
    MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; 
ALTER TABLE `link_art_c` 
    MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;COMMIT; 
+0

に追加しています。 – Noman

+0

あなたの現在のクエリで直面している問題は何ですか?いくつかのサンプルデータに基づいて、現在の結果と期待される結果をよりよく投稿します。 @frank – 1000111

+0

@Noman MySQLダンプが追加されました 結果は不良です。 "VW Beetle"でも "高速"配信が検索されましたが、これは "タグ"に "ほとんど"ありません – frank

答えて

1

あなたwhere句は、最後selectに適用されます。

SELECT id, name, mod_name, picture, hits from link_art_a 
where 
find_in_set('Car', tag) > 0 

UNION ALL 
SELECT id, name, mod_name, picture, hits from link_art_b 
where 
find_in_set('Car', tag) > 0 

UNION ALL 
SELECT id, name, mod_name, picture, hits from link_art_c 
where 
find_in_set('Car', tag) > 0 

NOTES:あなたはこのようなすべてのselect

whereを追加する必要が

  1. あなたは、この場合にはorder byを削除する必要があります。
  2. それはfind_in_set()ないfind_in_field()

それとも、すべての3つのテーブル各テーブルの少なくとも2つの異なるレコードのサンプルデータを追加してくださいすることができ、それらのすべて

SELECT id, name, mod_name, picture, hits from 
(
SELECT id, name, mod_name, picture, hits, tag from link_art_a 
UNION ALL 
SELECT id, name, mod_name, picture, hits, tag from link_art_b 
UNION ALL 
SELECT id, name, mod_name, picture, hits, tag from link_art_c 
) as t1 
where 
find_in_set('Car', t1.tag) > 0 order by t1.name asc 
+0

MySQLエラー:#1305 - 機能qb.find_in_field存在しない。 Find_in_setは2つの結果しか提供しませんが、「fun」を含む2つ以上のレコードが存在します。アイディア? – frank

+0

MySql Serverバージョン:5.5.49-0 + deb8u1 - (Debian) – frank

+0

@frank私は 'fun'でそれをテストし、3つの結果を返しました。 – wajeeh

関連する問題