Php 使用sql内部联接从两个表中获取数据,尝试获取非对象的属性
我有两个表事件和会话,如下所示 事件表 会话表 以下是预期结果 这是我的解决办法Php 使用sql内部联接从两个表中获取数据,尝试获取非对象的属性,php,mysql,sql,html-table,phpmyadmin,Php,Mysql,Sql,Html Table,Phpmyadmin,我有两个表事件和会话,如下所示 事件表 会话表 以下是预期结果 这是我的解决办法 <table> <tr> <th>Sessions </th> <th>konto</th> <th>Mobile</th>
<table>
<tr>
<th>Sessions </th>
<th>konto</th>
<th>Mobile</th>
<th>Komputer</th>
<th>Date</th>
</tr>
<?php
$conn = mysqli_connect("localhost", "root", "", "ideabank_julia");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT sid, datetime, count(*) as num_rows, count(distinct sid) as sessions,
sum( targetbuttonname = 'konto' ) as num_konto,
sum(devicetype ='Computer') as num_computer,
sum(devicetype = 'Mobile') as num_mobile from events
INNER JOIN sessions ON events.sid = sessions.sid group by sid, datetime;";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr>
<td>". $row["num_rows"]."</td>
<td>". $row["num_konto"]."</td>
<td>". $row["num_mobile"]. "</td>
<td>". $row["num_computer"]. "</td>
<td>". $row["datetime"]. "</td>
</tr>";
}
echo "</table>";
} else { echo "0 results"; }
$conn->close();
?>
</table>
当我在上面的php脚本上运行时,我得到以下错误
# 1052 - Column: 'sid' in field list is ambiguous
Trying to get property of non-object
我在代码中做错了什么?我认为您应该在所选列中添加别名,以说明从哪个表中获取列。请尝试下面的代码
$sql = "SELECT events.sid, events.datetime, count(events.*) as num_rows, count(distinct events.sid) as sessions,
sum( events.targetbuttonname = 'konto' ) as num_konto,
sum(events.devicetype ='Computer') as num_computer,
sum(events.devicetype = 'Mobile') as num_mobile from events
INNER JOIN sessions ON events.sid = sessions.sid group by sid, datetime";
您应该在groupby条件中为冒号添加别名
$sql = "SELECT even.sid, even.datetime, count(*) as num_rows,
count(distinct even.sid) as sessions,
sum( even.targetbuttonname = 'konto' ) as num_konto,
sum(devicetype ='Computer') as num_computer,
sum(devicetype = 'Mobile') as num_mobile from events even
INNER JOIN sessions ON even.sid = sessions.sid group by even.sid,
even.datetime";
请参阅:第一个错误表示phpmyadmin不知道从何处获取列sid。使用类似于tableName的东西。columnName@Strawberry我真的需要为此创建最终代码吗???@CarlBinalla woow,我使用的是events.sid和sessions.sid,那么你的意思是什么呢?@user9964622在SELECT sid中,你没有定义什么是表sid,至于表中同时存在的其他列,这里不起作用的是错误1064-您在“*as num_rows,countdistinct偶数.sid as sessions”附近的语法有问题,我已经解决了这样的问题“$sql=SELECT sessions.sid,events.datetime,count*as num_rows,countdistinct sessions.sid作为会话,sum targetbuttonname='konto'作为num_konto,sumdevicetype='Computer'作为num_Computer,sumdevicetype='Mobile'作为num_Mobile from events事件的内部加入会话。sid=sessions.sid按会话分组。sid,事件。日期时间`你对上面的答案进行了检查吗?是的,现在正在工作,这就是为什么我决定使用我在上面发布的这个方法。