我在尝试使用query
这是我的表格看起来如何
产品
products_photos
这是我的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
答案 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。