php - MySQL 将查询限制为一个一致的值

标签 php sql mysql database

我当前的查询返回一个如下表:

+------------+
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/

相关文章:

java - 如何将包含json对象的JSON数组发送到php服务器

php - 将 CSS 添加到 DomPDF

sql - 如何在SQL Server中获取列的总和并在单个查询中显示?

SQL - 排序后,仅返回列中具有某些连续值的行

sql - PostgreSQL 查询以获取彼此之间微秒内发生的事件

mysql - JOIN MySQL 的表结果中未包含 SUM 信息的子查询

php - 这个 PHP 7 查询脚本有什么问题?

PHP准备语句: Why is this throwing a fatal error?

php - 如何使用 SWIG 在 OS X 上编译 PHP 扩展

php - 只需单击一个提交按钮即可将多行插入数据库