2016-06-24 18 views
0

私は2つのテーブルからすべての情報を取得しようとしているいくつかの問題を抱えているから、すべての情報を取得する私のここquery二つのテーブル

私のテーブルは

の製品を見てどのようにされて

http://imgur.com/uI7Z8XG

products_photos

http://imgur.com/l5JSxWx

、ここでは、私がvar_dump($row)を行うときに、これは私がどのように私はそれがとてもPhotoSrcすべての私のarrayを返すことができます

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) 

を取得した結果である私の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); 

です写真ではなく、string

*注:私はproductsテーブル内PhotoIdが必要かどうか

答えて

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) 
+0

を写真を宣言するには、正しい答えは、残念ながらいくつかのエラーがあなたのコードであったが、私はそれらを固定これはありがとう:) – user1915308

+0

私は助けになることができ幸せです –

0

されている場合、私はあなたが離れて最初の分割画像と製品に必要だと思うかわからない...配列による

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

そしてループと値をphotosrc配列に追加します。

0

まず写真を持たない製品が必要な場合は、左結合(最初のテーブルのすべての行を使用し、2番目のテーブルがある場合は2番目のテーブルの行を結合する)を使用する必要があります。

この声明は、写真がある場合に備えて製品を提供します(したがって、製品は2行で同じになりますので、画像の後半部分のみが変更されます)。 mysqli_fetch_objectは現在の行だけを返します(すべての行をループする解決策についてはhttp://www.w3schools.com/php/func_mysqli_fetch_object.aspを参照してください)。

この種の関係では、商品表の写真IDは必要ありません。