首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL组合结果

问MySQL组合结果
EN

Stack Overflow用户
提问于 2013-09-13 03:09:07
回答 1查看 56关注 0票数 0

我有一个表users,我有一个简单的搜索查询:

代码语言:javascript
复制
SELECT * 
FROM   users 
WHERE  username LIKE 'rya%' 
LIMIT 10

我还有一个名为follows的表,它基本上是一个用户列表,后面跟着其他用户。我修改了上面的查询,只在特定用户下面的内容中搜索:

代码语言:javascript
复制
SELECT users.* 
FROM   follows
INNER JOIN users ON users.id = follows.following_id
WHERE  username LIKE 'rya%' AND follows.follower_id = 18
LIMIT 10

大多数情况下,上面的查询只返回几个结果(因为我没有搜索整个users表)。

我想要做的是结合上面的2个查询,返回最多10个用户名的结果,这些用户名匹配一个特定的字符串,并首先列出用户的以下内容,然后搜索整个用户表。

我已经有了一个解决方案,但是它需要在应用程序级别上这样做,首先运行第二个查询,然后先运行这两个查询。有什么方法可以在一个查询中完成所有这些吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-13 03:57:44

这样做的一种方法是搜索整个用户表,但要对结果进行排序,以便追随者首先出现。如果没有模式、示例数据和输出,很难理解您想要什么,但类似的情况如下

代码语言:javascript
复制
SELECT users.* 
FROM   users
LEFT JOIN follows ON users.id = follows.following_id
WHERE  username LIKE 'rya%'
ORDER BY follows.follower_id = 18 DESC
LIMIT 10

注意,为了获取所有用户,我使用了一个LEFT JOIN。另一种方法是对两个表的结果进行UNION,并将其包装成一个SELECT。我不知道你为什么要这样做,因为有另一种选择,但这就像

代码语言:javascript
复制
SELECT *
FROM (
    SELECT users.* 
    FROM   follows
    INNER JOIN users ON users.id = follows.following_id
    WHERE  username LIKE 'rya%' AND follows.follower_id = 18
    LIMIT 10

    UNION

    SELECT * 
    FROM   users 
    WHERE  username LIKE 'rya%' 
    LIMIT 10
) AS u
LIMIT 10

编辑

因为第二个是为您工作的,所以我认为我使用UNION ALL抛出了一个变体,因为它不会删除重复的行,这比UNION更快。你必须确保你自己没有副本,我们可以这样做

代码语言:javascript
复制
SELECT *
FROM (
    SELECT users.* 
    FROM   follows
    INNER JOIN users ON users.id = follows.following_id
    WHERE  username LIKE 'rya%' AND follows.follower_id = 18
    LIMIT 10

    UNION ALL

    SELECT users.* 
    FROM   follows
    INNER JOIN users ON users.id = follows.following_id
    WHERE  username LIKE 'rya%' AND follows.follower_id != 18
    LIMIT 10
) AS u
LIMIT 10
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18777669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档