Nano Hash - криптовалюты, майнинг, программирование

Выберите 2 столбца с CakePHP 2

Извините, если название не соответствует моему вопросу.

У меня есть таблица с именем Продажи и 3 столбца с именами Продавец, Покупатель и Цена.

Что у меня есть: До

Что я хочу: После

В основном я хочу отобразить список продавцов с суммой продаж, которые они сделали с одним покупателем.

Это SQL-запрос, с которым я собираюсь:

SELECT seller, buyer ,SUM(price)
FROM sales
GROUP BY seller , buyer

Моя проблема (кроме того, что этот запрос, вероятно, неверен) - это "перевод" в CakePHP. После просмотра поваренной книги у меня есть это в моем контроллере:

public function myview (){    
$this->set('mysales', $this->Sales->find('all', 
array('sum(price) AS total','group' => array('seller','buyer'))));
}

Я отображаю результаты в myview.ctp в HTML-таблице с помощью PHP (я не помещал элементы HTLM ниже):

<?php
foreach ($mysales as $thesales)
    {      
        echo $thesales['Sales']['seller']; 
        echo $thesales['Sales']['buyer'];
        echo $thesales['Sales']['total'];
    }?>

Конечно, это не работает. Я работаю с SQL Server 2014, и у меня есть эта ошибка:

Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Column 'sales.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Большое спасибо за вашу помощь !


  • Можешь сделать debug() на Sales->find()? Он должен включать сгенерированный запрос. 12.08.2016
  • массив( 'Продажи' => массив( 'id' => '1', 'цена' => '100', 'покупатель' => 'мистер Х', 'продавец' => 'мистер А' )) 12.08.2016

Ответы:


1

Для функций SQL следует использовать следующий синтаксис: Использование Функции SQL

Попробуй это:

Для CakePHP 3:

$mysales =  $this->Sales->find();

$mysales =  $mysales 
    ->select([
        'seller', 'buyer',
        'total_price' => $mysales ->func()->sum('price'),
      ])
    ->group(['seller','buyer'])
    ->toArray();

pr($mysales); // Check your result

Для CakePHP 2.x:

$this->set('mysales', $this->Sales->find('all', 
  array(
     'fields' => array('SUM(price) AS total','seller','buyer'),
     'group' => array('seller','buyer')
  )
));

На ваш взгляд:

pr($mysales);
12.08.2016
  • Спасибо за ответ ! Кажется, что выбор не работает, у меня есть эта ошибка: вызов функции-члена select() в массиве 12.08.2016
  • Вы следовали точно такому же синтаксису, который я указал? Он не должен показывать такую ​​ошибку. Вы используете CakePHP 3, верно? 12.08.2016
  • Мне очень жаль, мой администратор сказал мне, что это Cakephp 3, но я только что проверил Version.txt, и там написано, что у меня Cakephp 2.3.6. 12.08.2016
  • Я отредактировал свой ответ для CakePHP 2.x. Пожалуйста, взгляните. 12.08.2016
  • Я люблю тебя так сильно. Запрос работает, а сумма строк нет, и это потому, что я тупой. Строка на моем столе echo $thesales['Sales']['total']; это неправильно, потому что переменная total не находится в моей базе данных, но когда я делаю это: echo $total, это дает мне неопределенную переменную. Как вывести итог? 12.08.2016
  • Чтобы отобразить итог, вам нужно написать $thesales[0]['total'] вместо $thesales['Sales']['total']; 12.08.2016
  • Большое спасибо, много виртуальных объятий для вас 12.08.2016
  • @heisenberg помните, что вы можете создавать виртуальные поля, чтобы вы могли получить доступ к полю, используя $thesales['Sales']['total']. См. этот ответ 12.08.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..