繁体   English   中英

mysql-从表中选择值从另一个表中选择值

[英]mysql - select values from tables LIKE values from another table

我有两个表的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的项目,并且其名称就像一个关键字。 用于简单的搜索引擎。 我在做这样的查询:

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))中使用? 我的意思是不用笨拙的查询:

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%")

提前致谢。

尝试这个 :

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'

您需要与项目建立内部连接。 我也不认为您可以使用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%'

经过数小时的无跳搜索正确语法后,我找到了我想要的东西。 最好的方法,而不是使用正则表达式并使查询复杂化,我建议使用concat将所有列名都存储在字符串中,然后通过与我们具有关键字一样多的LIKE进行搜索。 也许那看起来并不优雅,但对我来说已经足够了。 例:

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

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

希望它能帮助任何人。

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%'
            )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM