我不擅长sql,但我到了那里。我搜索了stackoverflow,但我似乎无法找到解决方案,我希望有人能帮助我。我有一个表(用户)与数据如下。 book_id列是另一张包含用户订阅的书籍的关键字。如何在同一个表上合并两个查询以获得MySQL中的单个结果集
|--------|---------------------|------------------|
| id | book_id | name |
|--------|---------------------|------------------|
| 1 | 1 | jim |
| 2 | 1 | joyce |
| 3 | 1 | mike |
| 4 | 1 | eleven |
| 5 | 2 | max |
| 6 | 2 | dustin |
| 7 | 2 | lucas |
|--------|---------------------|------------------|
我在我的PHP代码中有一个函数,它返回来自特定书籍ID(1或2)的两个随机用户。查询中的一个返回结果在第1列,并导致2返回在柱状2的结果:
|---------------------|------------------|
| 1 | 2 |
|---------------------|------------------|
| jim | max |
| joyce | dustin |
|---------------------|------------------|
我已经通过运行两个单独的查询,如下所示来实现这一点。我想知道是否有可能通过一个查询以及如何实现此功能。
$random_users_with_book_id_1 = SELECT name FROM users WHERE book_id=1 LIMIT 2
$random_users_with_book_id_2 = SELECT name FROM users WHERE book_id=2 LIMIT 2
再一次,我很抱歉,如果它太具体。下面的查询已经最接近我试图实现的。:
SELECT a.name AS book_id_1, b.name AS book_id_2
FROM users a, users b
WHERE a.book_id=1 AND b.book_id = 2
LIMIT 2
编辑:我创造了一个小提琴与他一起玩。我感谢任何帮助!谢谢!! http://sqlfiddle.com/#!9/7fcbca/1
你不清楚。请尽力解释结果如何作为输入的函数。你似乎想要将两列并排配对。 (可能只是在DBMS之外更好地完成用户gui格式化。)将行号列添加到table1的受限排序限制,加入行号相等,然后选择其他列。这*是一个常见问题 - 谷歌更多,直到你找到答案或部分答案 - 你不是第一个问这个问题的人。注意:MySQL没有ROW_NUMBER或RANK,并且在一个SELECT语句* undefined *中读取和更新变量。 – philipxy
谢谢@philipxy。我同意,我需要更多地解释这一点,并且我编辑了我的问题,并且包含了一个小提琴。我在我的PHP代码中有一个函数,它需要一个具有1和2作为n_id的用户列表。在我的PHP代码中,我调用了两个不同的sql函数,一个从n_id 1获取用户,另一个从n_id 2获取用户。我认为使用一个sql查询获得两组用户的方法更好。那可能吗?我在这里错过了什么吗?再次,我不擅长SQL。我将继续搜索SO和Google。我敢肯定,答案是在那里 – realnsleo
PS谷歌搜索'stackoverflow“mysql”把两列并排按行号“给https://stackoverflow.com/q/40482804/3404097及其他人,但他们使用@ n = @的n + 1。在MySQL中,为了获得行号,你必须编写一个程序,通过循环插入增加列号。 (你可以单独谷歌。)MySQL的公司Percona已经表明,MySQL的当前代码可以使用CASE以某种方式安全地使用@ n = @ n + 1,但是我现在没有链接。不停寻找。 – philipxy