Điểm:1

Làm cách nào tôi có thể lấy Trung bình của trường nhận xét theo node_id?

lá cờ us

Tôi có Nhận xét ở đây trong đó người dùng có thể xếp hạng nội dung.

Tôi muốn nhận được xếp hạng trung bình cho mỗi nội dung, làm cách nào để tôi có được mức trung bình một cách hiệu quả?

Tôi có đoạn mã sau để lấy Trung bình:

$cids = \Drupal::entityQuery('bình luận')
    ->điều kiện('entity_id', $variables['row']->nid)
    ->điều kiện('loại_thực thể', 'nút')
    ->điều kiện('comment_type', 'content_rating')
    ->thực thi();

$bình luận = [];

$totalRating = 0;

nếu ($cids) {
    foreach ($cids as $cid) {
        $comment = Comment::load($cid);
        $comments[] = $comment->get('field_rating')->value;
    }

    $totRating = mảng_sum($bình luận) / đếm( $bình luận );

    $totalRating = ceil($totRating);
}

Tôi biết điều này không hiệu quả vì tôi nhận được TẤT CẢ các nhận xét và tính toán thủ công cho xếp hạng trung bình.

Làm cách nào tôi có thể nhận được xếp hạng trung bình ở cấp độ truy vấn?

Điểm:1
lá cờ ph

Bạn nên có một bảng trong cơ sở dữ liệu của mình có tên giống như bình luận__field_rating. Bảng đó phải có một cột như trường_rating_value. Khi bạn đã xác nhận điều đó, bạn có thể viết một truy vấn như sau:

$q = $database->db_select('comment__field_rating)
$q->addExpression('avg(field_rating_value)', 'avg_rating')
$avg = $q->execute()->fetchCol();

Đó là tất cả chưa được kiểm tra bởi vì tôi không có cơ sở dữ liệu của bạn.

Điểm:0
lá cờ cn

In the docs about the Entity API, there is a method from EntityStorage that you can use to load an array of entity IDs, the loadMultiple($id). Then you can loop through the array of Comments and get all field_ratings like you are already doing.

// Load multiple entities, also exists as entity_load_multiple().
$entities = \Drupal::entityTypeManager()->getStorage($entity_type)
  ->loadMultiple([1, 2, 3]);

Also, instead of loading \Drupal::entityTypeManager(), you can inject the service 'entity_type.manager' inside the constructor of your class. This is the best way to call it, but the first one will work ok.

lá cờ us
Mục tiêu của tôi ở đây là đạt xếp hạng Trung bình và giảm thiểu việc sử dụng bộ nhớ.Câu trả lời của bạn không giải quyết được vấn đề này, Giả sử rằng có một triệu nhận xét, Việc nhận tất cả các nhận xét sẽ dẫn đến lỗi `Đã hết kích thước bộ nhớ được phép`. Tôi muốn nhận được xếp hạng trung bình ở cấp độ truy vấn. Giống như truy vấn như thế này `SELECT AVG(Price) AS AveragePrice FROM Products;`
Jean da Silva avatar
lá cờ cn
Tôi hiểu rồi. Sau đó, nếu tôi hiểu đúng, bạn không thể tạo một truy vấn động để trả về SUM của tất cả các field_ratings và một truy vấn động khác để trả về số lượng của tất cả các nhận xét, sau đó trong PHP sử dụng cả hai giá trị để lấy giá trị trung bình? Nếu không thể tổng hợp và đếm từng sổ đăng ký của bảng, thì bạn có thể thực hiện theo đợt không? Đếm số lượng đăng ký và sau đó phân tách theo đợt. Dù bằng cách nào, bạn chỉ có thể truy xuất tổng hoặc field_rating nếu muốn thay vì tải mọi thực thể.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.