Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Сделал такой список:
 
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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.