PHP Mysql正确迭代具有别名的表

时间:2017-10-06 14:07:07

标签: php mysql

我有以下Mysql查询:

$sql = "select r.brand AS brand, r.name AS name, r.cost AS cost, e.price AS price, d.shipping as shipping 
FROM tab.rawproduct r 
INNER JOIN price e ON r.housecode=e.housecode 
INNER JOIN product d ON e.productid=d.productid  
WHERE r.housecode='$housecode'";

将houscode分配给一个变量,然后传递给sql语句:

<label>Housecode:</label><input class="boxes" type="text" name="housecode" value="<?php echo $housecode; ?>"><br />        

$housecode = $_POST['housecode'];

Housecode通过表单提交,操作设置为$ _SERVER [PHP_SELF]

我正在尝试使用以下内容迭代结果:

$result = $con->query($sql);

if ($result->num_rows >0) {
while($row = mysqli_fetch_array($result))  { 
    $brand = $row['brand'];     
    $housecode  = $row['housecode'];
    $name = $row['name'];
    $cost = $row['cost'];
    $salesprice = $row['price'];
    $shipraw = $row['shipping'];
    }
} else {
echo "0 Results";
}

$con->close();

当用户提交住宅代码并且&#34; 0结果&#34;是回应。

我已经研究过这个问题并阅读Lucas Knuth's post

  

如果结果的两列或多列具有相同的字段名称,则   最后一列优先。访问的其他列   同名,您必须使用列的数字索引或制作一个   列的别名。对于别名列,您无法访问   具有原始列名称的内容。所以,你可以使用AS   在您的SQL查询中为doubled行设置其他名称或使用   编号索引来访问它们。

所以我在上面的查询中使用了AS关键字,但我仍然没有得到任何结果。我也尝试过更改为mysqli_fetch_row($ result)并尝试分配$ row [0],1 ...等。再没有运气。

当我运行Apache error_log时,我得到以下内容:

试图在第34行获得非对象的属性。在第34和35行,我有:

if ($result->num_rows >0) {
while($row = mysqli_fetch_array($result))  { 

非常感谢任何帮助。

干杯

2 个答案:

答案 0 :(得分:0)

我复制了您的示例,但我在您的选择查询中发现了一个错误:您错过了r.housecode

$sql = "select r.brand AS brand, r.name AS name, r.cost AS cost, e.price AS price, d.shipping as shipping, r.housecode AS housecode
FROM tab.rawproduct r 
INNER JOIN price e ON r.housecode=e.housecode 
INNER JOIN product d ON e.productid=d.productid  
WHERE r.housecode='$housecode'";

检查表中的交叉引用是否匹配,因为在我的示例中正确返回了行

price

housecode  productid   price
HT0008     4           3400
HT0008     5           5400

product

shipping  productid
64        4
78        5

rawproduct

brand     name     cost   housecode
Cani      bellaaa  63824  HT0008

答案 1 :(得分:0)

我已经找到了自己的答案。

问题在于我只选择了一个数据库,即tab.rawproduct BUT表价格e和procduct d来自完全不同的数据库。

所以sql查询应该是这样的:

$sql = "SELECT r.brand, r.name, r.cost, e.price, d.shipping FROM 
tab.rawproduct r
INNER JOIN t1.price e on r.housecode=e.housecode
INNER JOIN t1.product d on e.productid=d.productid 
WHERE r.housecode = '$housecode' ";

如果通过检查mysqli-&gt; errno:

找到错误
if(!$result = $mysqli->query($sql)) {
 echo "Error: Our query failed to execute and here is why: \n";
 echo "Query: " . $sql . "\n";
 echo "Errno: " . $mysqli->errno . "\n";
 echo "Error: " . $mysqli->error . "\n";
 exit;
}

希望这可以帮助其他人面对同样的问题。

感谢您的所有意见和帮助。