当前位置: 首页 > 面试题库 >

将SQL查询的SELECT子句解析为PHP数组

刘兴朝
2023-03-14
问题内容

这更多地用于在PHP发送到服务器之前分析PHP中的查询。我为什么要这么做很复杂,所以我宁愿不谈这个原因。

在PHP中,我需要将字段选择存储到php数组中。因此,以该查询为例:

SELECT user_id,username,DATE(join_datetime) as join_date, (SELECT COUNT(1) FROM foobar WHERE foonum IN (5,4,6) and user_id = users.user_id) as myfoo_count 
FROM users 
WHERE user_id = 123

因此,在这种情况下,我需要将“ user_id,用户名,DATE(join_datetime)存储为join_date,(从foobar WHERE
foonum IN(5,4,6)和user_id =
users.user_id)中选择COUNT(1)作为myfoo_count”)用逗号(,)分解的数组。所以我会得到:

array (
  [1] => 'user_id',
  [2] => 'username',
  [3] => 'DATE(join_datetime) as join_date',
  [4] => '(SELECT COUNT(1) FROM foobar WHERE foonum IN (5,4,6) and user_id = users.user_id) as myfoo_count'
)

我已经达到了提取查询的字段部分的目的,但是我一直想尝试用逗号爆炸字段。主要问题在于子查询中也可能包含逗号(请参见示例)。

谢谢你的帮助!


问题答案:

您将不得不编写几乎与MySQL查询解析器一样复杂的解析器(用YACC / Bison for
C编写)。它不会是正则表达式或小的字符串操作。这是一种非常规语言,没有实际的解析器就无法解析它们。

您也不能单单查找包含逗号和括号的字符串,SQL比这复杂得多。您可以在表达式,函数调用,条件逻辑等中包含表达式。所有这些表达式都可以使用嵌套在逗号和括号内的任意深度。

http://dev.mysql.com/doc/refman/5.0/en/expressions.html

如果您真的想用PHP做到这一点,那么您就需要做很多工作。



 类似资料:
  • 问题内容: 我有以下SQL表 部 雇员 我想写一条返回的声明 我有 当然,这缺少“男性雇员的数量”。由于不确定,我被困在这里,在哪里指定附加子句e.gender = male。 我忘了提:HQL或标准会很好。 问题答案: 假设原始查询和架构正确:

  • 问题内容: 我有这个查询,我想选择那个选择的反函数。 有没有简单的方法可以解决我的问题? 问题答案: 只需使用以下查询:

  • 问题内容: 将SELECT查询放在UPDATE查询的WHERE子句中时出现错误。 我的查询是这样的: AND错误将显示如下: “无法在FROM子句中指定目标表’m’进行更新” 问题答案: 实际上,您可以通过将其包装在子查询中来更新它(从而为结果创建临时表) 或使用 JOIN

  • 问题内容: 此查询的目的是带回产品及其在售产品的价格,价格应从最接近但不等于传入日期的日期开始,本质上是最近的可用价格。没有每天的价格记录。在where子句中使用聚合select语句有些不对劲。有一个更好的方法吗?也许在加入标准中? 实际查询稍微复杂一些,但这本质上是问题。感谢您的输入。 编辑 将返回不止一种产品 编辑 我正在尝试@Remus Rusanu和@km的建议(尽管@Remus Rusa

  • 考虑以下查询: 查找薪资总额大于所有部门薪资总额平均值的所有部门 重写此查询而不使用with构造。

  • 本节介绍子查询,子查询是嵌套在另一个语句(如:,,或语句)中的查询。 SQL Server中常用的子查询语句如下: 子查询 - 介绍子查询概念并向您展示如何使用各种子查询类型来查询数据。 相关子查询 - 介绍相关子查询概念以及如何使用。 EXISTS - 测试子查询返回的行的存在性。 ANY - 将值与子查询返回的单列值集进行比较,如果值与集合中的任何值匹配则并返回。 ALL - 将值与子查询返回