Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从3个不同的表中查询多行_Php_Mysql - Fatal编程技术网

Php 从3个不同的表中查询多行

Php 从3个不同的表中查询多行,php,mysql,Php,Mysql,我想知道我怎么能不使用group_concat就做到这一点。因为我的评论太长,所以小组讨论的内容太多,所以不会返回所有的评论。我能想到的唯一其他方法是循环查询。只是让你知道有几个产品和每个产品的几个评论。有什么想法吗 $this->db->select(“product.id, product.name作为名称, 组_concat(user.name)作为用户, 集团公司(整体评级)作为整体, 组(评级说明分隔符“|”)作为审查); $this->db->join('rating','ratin

我想知道我怎么能不使用group_concat就做到这一点。因为我的评论太长,所以小组讨论的内容太多,所以不会返回所有的评论。我能想到的唯一其他方法是循环查询。只是让你知道有几个产品和每个产品的几个评论。有什么想法吗

$this->db->select(“product.id,
product.name作为名称,
组_concat(user.name)作为用户,
集团公司(整体评级)作为整体,
组(评级说明分隔符“|”)作为审查);
$this->db->join('rating','rating.idProduct=alcohol.id','LEFT');
$this->db->join('user','user.id=rating.idUser','LEFT');
$query=$this->db->get('product');
返回$query->result();
输出如下所示:

[0] => stdClass Object (
        [name] => Product
        [reviews] => Array(
                [0]=> (
                        [user] => "cKendrick "
                        [overall] => "1"
                        [Rating] => "lalalalalala review"
                    )
                [1] = >
                    (...
    )

)
[1] => stdClass Object (..
更新:

"SELECT product.id,
  product.name as name,
  category.permName as category,
  subCategory.permName as subCategory,
  product.permName as permName,
  product.picture as picture,
  user.username as username,
  user.firstName as firstName,
  user.lastName as lastName,
  user.picture as userPicture,
  rating.description as review
FROM (
     SELECT *
     FROM product
     LIMIT ?, 30
) product
LEFT JOIN category
    ON category.id = product.category
LEFT JOIN subCategory
    ON subCategory.id = product.subCategory
LEFT JOIN rating
    ON rating.idAlcohol = product.id
LEFT JOIN user
    ON user.id = rating.idUser
ORDER BY product.lastReview desc"

我将如何根据其类别对其进行限制?

以下是我的假设:

您希望获得所有具有相关评级的产品。你想知道谁写了哪篇评论

 select product.id, product.name, rating.overall, rating.description, user.name 
from product 
left join rating on product.id = rating.productId 
left join on user.id=rating.userId;

如果这不是您想要的,请编辑您的帖子,并显示几行您要查找的内容。

您使用的是哪种DBAL?在普通的旧PHP中,如果您真的想使用单个查询,您可以这样做-

<?php

$db = new PDO('dsn', 'user', 'pass');
$sql = "SELECT product.id, product.name, rating.overall, rating.description, user.name AS user  
        FROM (
           SELECT *
           FROM product
           LIMIT 30
        ) product   
        LEFT JOIN rating
            ON product.id = rating.productId   
        LEFT JOIN user
            ON user.id = rating.userId";

$stmt = $db->prepare($sql);
$stmt->execute();

$output = array();
while ($row = $stmt->fetchObject()) {
    $output[$row->id]['name'] = $row->name;
    $output[$row->id]['reviews'][] = array('user'        => $row->user,
                                           'overall'     => $row->overall,
                                           'description' => $row->description);
}

我试图在1个查询中从3个表中获取信息。产品表、评级表和用户表。产品表显示了几个不同的产品,而评论则显示了每个产品的几个不同评论,用户表显示了进行评论的用户。我正在使用group_concat,因为我不知道还可以使用什么。所以我想我的问题是,如果不使用group_concat,我怎么做呢?我已经编辑了这篇文章。输出我希望类似于我的编辑,但如果在1个查询中有其他方法可以做到这一点,我愿意接受。联接不起作用,因为有多个条目用于rating.all、rating.description、user.name DBAL是什么?对不起,我是新手,正在努力学习。我试过你的代码,结果只得到一个空数组。你还说我应该多做一个查询?这样做会更明智吗?我只是想找出将所有这些内容放到1 page.DataBase抽象层的最佳方法。不用道歉,我们都得从某个地方开始。在一个查询中执行此操作没有错。这只意味着在同一产品上的每次审查中都会复制product.id和product.name字段。在这种情况下可能没什么大不了的。您是否尝试过在WorkBench中检查查询,或者您喜欢的db修补工具是什么?然后DBAL会是活动记录吗?我只是使用phpmyadmin来处理数据库。就查询而言,它在那里工作得很好,但当我在那里进行查询时,它只显示1个rating.overall和1个rating description以及1个user。根据产品的不同,它应该显示在1到10之间的任何位置。除非您对其进行了修改,否则查询将返回每个产品及其关联的评级和评级。您是在字段列表中添加GROUPBY子句还是聚合函数?很好,它已经开始工作了,但我不确定到底发生了什么。这是在mysql查询中循环,还是只是从查询中获取结果并重新排列?再次抱歉,如果这是一个愚蠢的问题,我只是想了解这里的基本原理
SELECT product.id,
    product.name as name,
    product.category,
    product.subCategory,
    product.permName as permName,
    product.picture as picture,
    user.username as username,
    user.firstName as firstName,
    user.lastName as lastName,
    user.picture as userPicture,
    rating.description as review
FROM (
    SELECT
        p.*,
        category.permName AS category,
        subCategory.permName AS subCategory
    FROM product
    LEFT JOIN category
        ON category.id = product.category
    LEFT JOIN subCategory
        ON subCategory.id = product.subCategory
    WHERE category.permName = ?
    LIMIT ?, 30
) product
LEFT JOIN rating
    ON rating.idAlcohol = product.id
LEFT JOIN user
    ON user.id = rating.idUser
ORDER BY product.lastReview desc