Перейти к содержанию
vivivor

Помощь в создании запроса sql

Рекомендуемые сообщения

Сделал такой список:
 
a3d07afe8d8f.png
 
Не получается сделать запрос к другой таблице(notify_when_arrives) чтобы подсчитать количество ожидающих клиентов
 
В той таблице есть колонка с id товаров - они повторяются (к примеру 5 раз 63, 2 раза 66 и тд)
 
Почему то колонку "Ожидают" считает не правильно, хотя делал по аналогии с колонкой "Куплено"

 

language_id в таблице notify_when_arrives - всегда 1

Запрос к таблицам

    public function getprr($data = array()) {

        $sql  = "SELECT p.product_id, ";
        $sql .= "pd.name AS product_name, ";
        $sql .= "SUM(op.quantity) AS purchased, "; // подсчет купленных товаров
        $sql .= "SUM(nwa.language_id) AS expecting, "; // подсчет ожиданий
        $sql .= "p.viewed, ";
        $sql .= "p.quantity AS product_quantity, ";
        $sql .= "p.orderednoopt ";
	$sql .= "FROM ".DB_PREFIX."product p ";
        $sql .= "LEFT JOIN ".DB_PREFIX."product_description pd ON pd.product_id=p.product_id ";
        $sql .= "LEFT JOIN ".DB_PREFIX."order_product op ON op.product_id=p.product_id ";
        $sql .= "LEFT JOIN ".DB_PREFIX."notify_when_arrives nwa ON nwa.product_id=p.product_id ";
        
        $sql .= "WHERE p.status = '1' ";
        
        $sort_data = array(
    		'p.product_id',
                'pd.name',
                'purchased',
                'p.viewed',
                'expecting'
                'p.quantity',
                'p.orderednoopt',
			);
            
            $sql .= " GROUP BY p.product_id";
            
			if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
				$sql .= " ORDER BY " . $data['sort'];
			} else {
				$sql .= " ORDER BY pd.name";
			}
			
			if (isset($data['order']) && ($data['order'] == 'DESC')) {
				$sql .= " DESC";
			} else {
				$sql .= " ASC";
			}
        
        $query = $this->db->query($sql);
        return $query->rows;
    }


Код из php

$prrs = $this->model_report_roptions->getprr($data);
    	
foreach ($prrs as $prr) {
	$this->data['prods'][] = array(
                'product_id'        => $prr['product_id'],
                'product_name'      => $prr['product_name'],
                'purchased'         => $prr['purchased'],
                'views'             => $prr['viewed'],
                'expecting'         => $prr['expecting'],
                'product_quantity'  => $prr['product_quantity'],
                'orderednoopt'      => $prr['orderednoopt']
			);
		}


Код из tpl

      <tbody>
          <?php foreach ($prods as $prod) { ?>
          <tr>
            <td><?php echo $prod['product_id']; ?></td>
            <td><?php echo $prod['product_name']; ?></td>
            <td><?php if (isset($prod['purchased'])) { echo $prod['purchased']; } else { echo 0; } ?></td>
            <td><?php echo $prod['views']; ?></td>
            <td><?php echo $prod['expecting']; ?></td>
            <td><?php echo $prod['product_quantity']; ?></td>
            <td><?php echo $prod['orderednoopt']; ?></td>
          </tr>
          <?php } ?>
        </tbody>

 

Подскажите пожалуйста, что не правильно делаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идее запрос надо такой:

SELECT p.product_id,

(SELECT COUNT(*) FROM notify_when_arrives nwa WHERE nwa.product_id=p.product_id) AS arrives_count,
pd.name AS product_name,

... Дальше всё остальное

 

LEFT JOIN notify_when_arrives из запроса надо убрать.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.