Php 列具有相同名称时如何保持连接打开
标题有点让人困惑,希望能从我的查询中清楚地看出我想做什么。我以为我理解联接,但显然不是,这是我的$查询:Php 列具有相同名称时如何保持连接打开,php,mysql,Php,Mysql,标题有点让人困惑,希望能从我的查询中清楚地看出我想做什么。我以为我理解联接,但显然不是,这是我的$查询: SELECT DATE(T0.timestamp), SUM(T0.total_responses), SUM(T0.responses), T0.metric_id, T1.metric_id FROM `personal_aggregates` AS T0 L
SELECT DATE(T0.timestamp),
SUM(T0.total_responses),
SUM(T0.responses),
T0.metric_id,
T1.metric_id
FROM `personal_aggregates` AS T0
LEFT JOIN `qrs_metrics` AS T1
ON T0.metric_id = T1.qrs_metric_id
WHERE T0.user_id = 1 AND
T0.duration = '1' AND
T0.category_id IN (1,2,3,4) AND
T0.timestamp >= 'period_duration'
GROUP BY DATE(T0.timestamp)";
我正在尝试联接metric_id和qrs_metric_id列上的表。但是,我从上述查询中没有得到任何结果。当我在PHP中循环遍历结果并检查任何变量时,例如$result['T0.metric\u id']
,我得到未定义的索引:T0.metric\u id
如果有人能对此有所了解,我将不胜感激。您的问题应该是
$query = "SELECT
DATE(T0.timestamp) AS T0timestamp,
SUM(T0.total_responses) AS total_responses,
SUM(T0.responses) AS responses,
T0.metric_id,
T1.metric_id AS metric_id_2
FROM `personal_aggregates` AS T0
就像
$result['metric_id'];
$result['metric_id_2'];
$result['T0timestamp'];
$result['total_responses'];
从关联数组访问中排除表别名,例如“T0.XXX”错误。您只能在SQL中执行此操作,请尝试以下操作:
$query = "SELECT DATE(T0.timestamp), SUM(T0.total_responses), SUM(T0.responses),
T0.metric_id AS metric0, T1.metric_id AS metric1
FROM `personal_aggregates` AS T0
LEFT JOIN `qrs_metrics` AS T1 ON T0.metric_id = T1.qrs_metric_id
WHERE T0.user_id = 1 AND T0.duration = '1'
AND T0.category_id IN (1,2,3,4)
AND T0.timestamp >= 'period_duration'
GROUP BY DATE(T0.timestamp)";
现在,您可以使用以下方法来改变现状:
echo $row['metric0'];
echo $row['metric1'];
或者需要向选定列添加一些别名
SELECT DATE(T0.timestamp) as tstamp, SUM(T0.total_responses) as responses...
并按别名引用列:
$result['tstamp']
或者,您可以通过数字索引引用列:
$result[0]
请下次格式化您的SQL代码。没有人愿意读一行巨大的厄运。如果你直接在MySQL(工作台或命令行)中运行查询,你会得到结果吗?连接是正确的,是PHP在这里表现不好。我建议在查询中添加列别名:
选择T0.metric\u id作为T0\u metric\u id,T1.metric\u id作为T1\u metric\u id,…
,然后在PHP中将它们读为$row['T0\u metric\u id']
和$row['T1\u metric\u id']
@Trent是的,我已经通过phpmyadmin尝试过了表结构是什么?(似乎个人_聚合没有度量_Id列?(也许您需要按T0.metric_Id和T1.metric_Id进行分组)和别名T0&T1.metric_Id..太棒了,请注意。首先将此标记为答案。