Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂的SQL查询。。。返回变量的名称_Php_Sql_Mdb2 - Fatal编程技术网

Php 复杂的SQL查询。。。返回变量的名称

Php 复杂的SQL查询。。。返回变量的名称,php,sql,mdb2,Php,Sql,Mdb2,请原谅,我相信这对大多数人来说都是一个基本问题,但我对来自不同表的表列有一个问题,这些表的名称彼此相同,并且试图在同一查询中从两个表中进行选择 好的,这是我的代码: $q_value = $mdb2->quote($_POST['query']); $field = $_POST['field']; $sql = "SELECT m.*, l.name FROM memberlist m, mail_lists l WHERE m.$field=$q_value

请原谅,我相信这对大多数人来说都是一个基本问题,但我对来自不同表的表列有一个问题,这些表的名称彼此相同,并且试图在同一查询中从两个表中进行选择

好的,这是我的代码:

$q_value = $mdb2->quote($_POST['query']);
$field = $_POST['field'];
$sql = "SELECT m.*, l.name FROM memberlist m, mail_lists l
        WHERE m.$field=$q_value
        AND l.id = m.list
        ORDER BY m.id";
$l_list = $mdb2->queryAll($sql, '', 'MDB2_FETCHMODE_ASSOC');
表memberlist包含以下列: id、电子邮件、列表、性别、姓名

“邮件列表”表有以下列: 身份证,姓名

运行查询后,我稍后使用foreach循环查询结果,如下所示:

foreach ($l_list as $l){ //blahblah }
问题是邮件列表中的“name”列指的是列表的名称,而memberlist中的“name”列指的是成员的名称

当我以后访问$l->name(在foreach中)时,我会得到m.name还是l.name?此外,我如何访问另一个


或者我只需要做两个单独的查询?

为什么您不能简单地使用:

SELECT m.*, l.name as l_name FROM ...
然后区分
name
l_name


这是一个风格问题,所以其他人可能不同意,但我从不在查询中使用
*
,倾向于使用显式列规范。在您的情况下,这实际上不是一个问题,除非您想:

SELECT m.*, l.* FROM ...

并且仍然区分这两个名字。有了明确的列规范,您可以在每个列中添加一个
as
子句,以给出唯一的名称。

为什么不能简单地使用:

SELECT m.*, l.name as l_name FROM ...
然后区分
name
l_name


这是一个风格问题,所以其他人可能不同意,但我从不在查询中使用
*
,倾向于使用显式列规范。在您的情况下,这实际上不是一个问题,除非您想:

SELECT m.*, l.* FROM ...

并且仍然区分这两个名字。有了明确的列规范,您可以在每个列中添加一个
as
子句,以提供唯一的名称。

完美!我现在觉得自己像个傻瓜。哈哈,谢谢!完美的我现在觉得自己像个傻瓜。哈哈,谢谢!