2014-01-29 37 views
0

這裏有一些innodb表,am店產品id,bm商店描述關鍵詞。mysql如何使這樣的查詢

CREATE TABLE IF NOT EXISTS `myt` (
    `am` varchar(15) NOT NULL, 
    `bm` varchar(30) NOT NULL, 
    KEY `am` (`am`), 
    KEY `bm` (`bm`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
INSERT INTO `myt` (`am`, `bm`) VALUES 
('1', 'hello'), 
('1', 'world'), 
('2', 'this'), 
('2', 'world'), 
('3', 'hello'), 
('2', 'there'); 

如何獲得一個有'hello world'這個詞的產品?

查詢,我嘗試:

(select * from myt a where bm='hello') union (select * from myt b where bm='world') where a.am=b.am 

給了我一個錯誤:

#1064 - You have an error in your SQL syntax; 

如果我存儲這樣的數據,應該索引的工作?謝謝。

P.S.

無主鍵的innodb表是否重要?

回答

0

試試這個....

select * 
from 
    (
     select * 
     from myt 
     where bm='hello' 
     group by am 
    ) t 
join 
    (
     select * 
     from myt 
     where bm='world' 
     group by am 
    ) t1 
    on t.am=t1.am 
0

您可以使用或在mysql中返回匹配的兩件事情:

SELECT * FROM MYT一個地方BM = '你好' 或BM = '世界'

1

首先你不應該使用varchar來存儲一個id。

select am 
from myt 
where bm in ('hello', 'world') 
group by am 
having count(am) = 2 

計數應(在這種情況下2)等於描述的數目where子句中

考慮使用的PostgreSQL代替MySQL的這種查詢。有了PostgreSQL,您可以將數組存儲在字段bm中,例如;

INSERT INTO `myt` (`am`, `bm`) VALUES 
('1', ['hello','world']), 
('2', ['this', 'world', 'there']), 
('3', 'hello'); 

它也有強大的功能,以後搜索這些數組字段。