我有两个表的MySQL数据库:用户和项目。它们看起来像这样:
用户:
id | user_name | desc
--------------------------
1 | john | tall
2 | dave | fat
3 | maria | pretty
项目:
id | item_name | color
--------------------------
1 | trousers | red
2 | shoes | blue
3 | shoes | red
我想从数据库列表中选择具有特定ID的项目,并且名称是LIKE关键字。这是使用简单的搜索引擎。 我正在提出这样的问题:
SELECT id, user_name, ( SELECT item_name FROM items WHERE id = u.id ) as desc FROM users u WHERE desc LIKE "%shoes%" AND color LIKE "%blue%"
因此,我希望有一行包含id = 2,username = dave和itemname = shoes,因为它是唯一一行符合我的查询。不幸的是,我收到一条消息,表示没有'desc'列。我知道'用户'中没有这样的列,但是如何告诉MySQL从名为desc的子查询中获取它?
附加问题:是否可以使用WHERE ... LIKE命令和数组样式,如IN(val1,val2,val3)?我的意思是代替loooong查询:
SELECT name
FROM users
WHERE name
LIKE "%john%" OR name
LIKE "%steven%" OR name LIKE "bob%"
缩短:
SELECT name FROM users WHERE name LIKE IN ( "%john%", "%steven%", "%bob%")
提前致谢。
答案 0 :(得分:3)
试试这个:
SELECT
u.id, u.user_name, i.item_name, i.color
FROM
users AS u,
items AS i
WHERE
i.id = u.id
AND
i.item_name LIKE "%shoes%"
AND
i.color LIKE "%blue%"
对于第二部分,如果您在MySQL dev site上查看此页面,您会发现可以使用REGEXP
来匹配您的结果,而不是LIKE
,因此我认为您可以使用
REGEXP 'john|steven|bob'
答案 1 :(得分:2)
您需要与项目进行内部联接。另外我认为你不能使用desc。在我的回答中使用了descr
尚未对此进行测试,但请尝试以下
SELECT u.id, u.user_name, i.item_name as descr
FROM users u INNER JOIN items i
ON i.id = u.id
WHERE i.item_name LIKE '%shoes%'
AND i.color LIKE '%blue%'
答案 2 :(得分:1)
经过数小时无跳搜索正确的语法后,我找到了我想要的东西。 最好的方法,而不是使用正则表达式和复杂的查询我建议使用concat所有列名称到字符串,然后通过尽可能多的LIKE搜索它,因为我们有关键字。也许这看起来并不优雅,但对我来说已经足够了。例如:
SELECT user_name, item_name FROM table WHERE CONCAT(user_name, item_name) LIKE '%keyword1%'
注意NULL记录 - 如果只将一个字段与null连接,结果也变为null,所以请使用IFNULL(null_record,'')。
希望它可以帮助任何人。
答案 3 :(得分:1)
SELECT *
FROM users u
WHERE
u.id IN (SELECT id
FROM items
WHERE
items.id=u.id
AND
color LIKE '%$search%'
AND
item_name LIKE '%$search%'
)