2

我有带有两个表的 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%")

提前致谢。

4

4 回答 4

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 开发网站上的此页面,您将看到您可以使用REGEXP来匹配您的结果,而不是LIKE我认为您可以使用类似的东西

REGEXP 'john|steven|bob'

于 2012-05-01T16:39:18.653 回答
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%'
于 2012-05-01T16:37:52.307 回答
1

经过数小时无望地搜索正确的语法后,我找到了我想要的东西。最好的方法,而不是使用正则表达式和使查询复杂化,我建议使用将所有列名连接到字符串中,然后通过尽可能多的 LIKE 搜索它,因为我们有关键字。也许这看起来并不优雅,但对我来说已经足够了。例子:

SELECT user_name, item_name FROM table WHERE CONCAT(user_name, item_name) LIKE '%keyword1%' 

注意 NULL 记录 - 如果您只将一个字段与 null 连接,结果也会变为 null,因此请使用 IFNULL(null_record, '')。

希望它可以帮助任何人。

于 2012-05-02T18:36:04.033 回答
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%'
            )
于 2012-11-26T10:16:51.750 回答