我发现了一个奇怪的问题。这是查询:
SELECT *, @allaccts := TRIM( BOTH ',' FROM owneridslinked4billing) as
targetids, ( select sum(price) from orderstable where
paymentstatus='unpaid' and ownid in (@allaccts) ) as amountdue FROM users
问题是目标的输出是:
110909,110910,110911,110912
(确切地说是什么)
但查询输出的结果不对。它不包括查询中的所有ID(110909,110910,110911,110912)和“@idlaccts中的ownid”。我想它将所有逗号分隔值作为一个而不是单独的值,因此输出错误的结果。
我希望这是有道理的。
我想要的是让mysql使用查询中owneridslinked4billing
字段中的数据,并输出ownid
位于owneridslinked4billing
中的结果(这是一个以逗号分隔的ID列表)。
答案 0 :(得分:1)
使用FIND_IN_SET
可能会立即提供解决方法:
SELECT *, @allaccts := TRIM( BOTH ',' FROM owneridslinked4billing) as targetids,
( select sum(price) from orderstable
where paymentstatus='unpaid' and
FIND_IN_SET(ownid, @allaccts) > 0 ) as amountdue
FROM users;
如果您打算在所有帐户ownid
的CSV列表中找到110909,110910,110911,110912
值,则可以使用此功能。
继续前进,您应该避免FIND_IN_SET
和CSV数据,并规范化您的数据。将每个id移动到一个单独的行并进行连接。