条件问题的子查询

时间:2017-02-13 16:52:19

标签: mysql node.js

我不知道如何更好地命名或说出这些,这导致我的搜索倾斜。

我有这个声明,它有效。

SELECT username
     , ip 
  FROM database.users 
 WHERE ip = (SELECT ip 
               FROM database.users_chat_history 
              WHERE username = ? 
              limit 1);

但是,我需要这样的东西,这是不允许的:

SELECT username
     , ip 
  FROM database.users 
 WHERE ip = (SELECT ip 
                  , posted_at 
               FROM database.users_chat_history 
              WHERE username = ? 
              group 
                 by posted_at desc 
              limit 1);
  

错误:ER_OPERAND_COLUMNS:操作数应包含1列

原因是我在进行搜索时需要它来获取最新/最近的行,并且在第一行时,它不会这样做,这会导致问题。第二个查询,我只需要ip来使用该语句,但是我需要它按sent_at降序进行分组,以便抓取最新的帖子。

编辑: 内部查询的数据库示例: enter image description here

2 个答案:

答案 0 :(得分:0)

我认为你应该替换" group by"使用ORDER BY子句。见下文:

SELECT username, ip FROM database.users WHERE ip = (SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at desc limit 1);

答案 1 :(得分:0)

我为子查询做了类似的事情:

SELECT ip FROM database.users_chat_history WHERE username = ? ORDER BY posted_at ASC LIMIT 1;

未经测试但应仅返回ip(一列),并且仅根据您要查找的内容返回一条记录(适应ASC / DESC)