我不知道如何更好地命名或说出这些,这导致我的搜索倾斜。
我有这个声明,它有效。
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降序进行分组,以便抓取最新的帖子。
答案 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)