获取两个表中的所有信息

时间:2016-06-24 16:40:12

标签: php sql

我在尝试使用query

从两个表中获取所有信息时遇到了一些问题

这是我的表格看起来如何

产品

http://imgur.com/uI7Z8XG

products_photos

http://imgur.com/l5JSxWx

这是我的SQL query

$id = json_decode(file_get_contents('php://input'), true)["id"];

    $result = mysqli_query($con, "SELECT * FROM products INNER JOIN products_photos ON products.ProductId = products_photos.ProductId");
    $row = mysqli_fetch_object($result);

    $data = '';

    if (!is_null($row)) {
      $data = $row;
    }

    print json_encode($data);

当我做var_dump($row)这是我得到的结果

object(stdClass)[3]
  public 'ProductId' => string 'pzhVrLsYXG' (length=10)
  public 'ProductName' => string 'Dell xps' (length=8)
  public 'ProductStatus' => string 'instock' (length=7)
  public 'ProductOverview' => string '' (length=0)
  public 'CategoryId' => string '5' (length=1)
  public 'CharacteristicId' => null
  public 'ReviewId' => null
  public 'ProducerId' => string '1' (length=1)
  public 'PromotionId' => null
  public 'ProductQty' => string '35' (length=2)
  public 'ProductOldPrice' => string '' (length=0)
  public 'ProductPrice' => string '2000' (length=4)
  public 'ProductLink' => string 'dell-xps' (length=8)
  public 'ProductPhoto' => string 'http://ecommerce/uploads/NDgxNzYwLWRlbGwteHBzLTg5MDAuanBn.jpg' (length=61)
  public 'PhotoId' => string '11' (length=2)
  public 'PhotoSrc' => string 'http://ecommerce/uploads/NDM5MDUzNDUzNDUuanBn.jpg' (length=49)

我怎样才能这样做PhotoSrc返回array我所有照片而不是string

*注意:我不确定PhotoId表中是否需要products

3 个答案:

答案 0 :(得分:1)

您似乎正在选择具有完整联接的数据。不管怎么想。可能有一个产品没有任何照片的情况,我们正在处理可能链接到单个产品的多张照片,SQL不允许选择数组到列值,所以我们'我必须遍历所有产品的查询结果并手动声明照片

$result = mysqli_query($con, "SELECT * FROM products");
$products = array();
if ($result) //sql query was executed successfully
{
    while (($product = mysqli_fetch_object(result)) != null) //iterate through all rows
    {
        $pid = (int)$product->ProductId;
        $photoresult = mysqli_query($con, "SELECT * FROM products_photos where ProductId = $pid");
        $product->Photos = array();
        if ($photoresult) //sql query was executed successfully
        {
            while (($photo = mysqli_fetch_object($photoresult)) != null) //iterate through all rows
            {
                //push the photo into the products photo array
                array_push($product->Photos, $photo);
            }
        }
        //push the product into products array
        array_push($products, $product);
    }
}

var_dump($products);//for debugging purpose (todo: remove)

答案 1 :(得分:0)

我认为您需要首先拆分图像和产品...

$images = array_map(function($element){; return [$element['ProductId'] => $element['PhotoSrc']];}, $products);

然后循环遍历数组并将值推送到photosrc数组中。

答案 2 :(得分:0)

首先,如果您希望产品没有照片,您可能应该使用左连接(使用第一个表中的所有行并连接第二个表中的行,如果有的话):

SELECT * FROM products LEFT JOIN products_photos ON products.ProductId = products_photos.ProductId

该声明将为您提供产品以及每张照片,如果有的话(小心,因此产品将在2行中相同,只有后一部分与图像会发生变化)。你没有从内连接中得到这个的原因(在每个产品至少有一张照片的情况下也适用)是mysqli_fetch_object只返回当前行(请参阅http://www.w3schools.com/php/func_mysqli_fetch_object.asp以获得循环所有行的解决方案)。

这种关系不需要产品表中的photoId。

相关问题