我当前的查询返回一个如下表:
+------------+
value1 | ....
value1 | ....
value2 | ....
value3 | ....
+------------+
我想要:
+------------+
value1 | ....
value1 | ....
+------------+
我只想接收具有第一个值的所有行。通常,如果我知道该值,我会执行 WHERE 子句,并且我不能使用 LIMIT,因为每个值都有不同的行数。
现在我的查询如下所示:
SELECT u.*, n.something, w.*
FROM ... AS u, ... AS n, ... AS w
WHERE u.id = n.id
AND w.val = n.val
AND u.desc LIKE '%GET REQUEST VARIABLE%'
这很有效,除了我得到太多行并且使用 PHP 来执行此操作会破坏代码可移植性并且是多余的。
最佳答案
不确定,但我认为您可以通过以下方式获得它:
SELECT u.*, n.something, w.*
FROM ... AS u
JOIN ... AS n ON u.id = n.id
JOIN ... AS w ON w.val = n.val
JOIN (
SELECT col
FROM ... AS u2
WHERE u2.desc LIKE ?
LIMIT 1
) AS u2 ON u2.col = u.col
其中内部 SELECT
中的 ...
是之前别名为 u
的同一个表。
编辑:还有一件事:我假设 col
对于不同的 desc
值是不同的;如果没有,您还必须在外部 SELECT
中重复 WHERE
。
(如果您不熟悉准备好的语句,?
就是您的 '%...%'
所在的位置...并且不要忘记对 Bobby Tables 进行转义;如果你是,当然,图书馆会为你做这件事:) )
关于php - MySQL 将查询限制为一个一致的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3041642/