Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Выбор данных с проверкой в других таблицах


Автор: xoslv 4.9.2008, 19:54
Таблица ордер:
Код

+---------+-------+----------------+-----------------+-------------+-----------+-----------+------
| ord_id  | cl_id  |    date1        |      date2       |dateMore  | coment  | oper_id  |ppr  
|    51     | 508   | 2008-04-08  | 0000-00-00   |      0         |              |  2           |**** 
|    52     | 101   | 2008-04-08  | 0000-00-00   |      0         |              |  2           |**** 
|    53     | 495   | 2008-04-08  | 0000-00-00   |      0         |              |  4           |**** 
|    54     | 102   | 2008-04-08  | 0000-00-00   |      0         |              |  2           |**** 


Таблица container:
Код

+---------+-------+--------+-------+-----+------+------+------+------+------+----------+
| cont_id | as_id | ord_id | cl_id | gid | oper | ord1 | ord2 | ord3 | ord4 | as_price |
+---------+-------+--------+-------+-----+------+------+------+------+------+----------+
|  185007 |    17 |  16066 |   101 |  34 |    9 | 10   |         |           |          | 0.3305   |
|  185008 |    22 |  16066 |   101 |  34 |    9 | 5     |         |           |          | 0.1525   |
|  185009 |    23 |  16066 |   101 |  34 |    9 | 10   |         |           |          | 0.2119   |
|  185010 |    25 |  16066 |   101 |  34 |    9 | 5     |         |           |          | 0.1525   |
|  185011 |    26 |  16066 |   101 |  34 |    9 | 3     |         |           |          | 0.2966   |
+---------+-------+--------+-------+-----+------+------+------+------+------+----------+


Объясняю, один клиент делает заказ на много позиций, все они сохраняются в БД.
Делая заказ в следующий раз, оператору надовидеть, чего и сколько заказывалось в прошлый раз.

Асортимент для заказа выберается одним запросом из нескольких таблиц:
Код

SELECT p.id, p.aid, a.a_name, a.count, p.price FROM prices p, assort a WHERE p.aid=a.a_id and p.gid='$client_group' and a.a_status='1';

после этого, разбераю масив через while и нет проблем.

Каким образом в этот запрос, можно вставит запрос на выбор данных из колонки "container.ord1" относительно последнего заказа данного клиента, чтобы потом через тотже while вывести соответствующее значение напротив нужного товара?

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


Автор: SneG0K 4.9.2008, 20:06
Код
SELECT p.id, p.aid, a.a_name, a.count, p.price FROM prices p, assort a WHERE p.aid=a.a_id and p.gid='$client_group' and a.a_status='1' UNION SELECT `ord1` FROM `container`WHERE /* данные относительно заказа

Автор: xoslv 4.9.2008, 21:05
А в данном случае ненадо прописывать общие колонки? Относительно которых, будет выбераться содержимое?
Например:
Код

SELECT p.id, p.aid, a.a_name, a.count, p.price FROM prices p, assort a 
WHERE p.aid=a.a_id and p.gid='$client_group' and a.a_status='1' 
UNION 
SELECT `ord1` FROM `container`WHERE a.a_id=container.as_id

Автор: SneG0K 4.9.2008, 21:34
Ну это как тебе будет удобно. UNION обьединяет несколько запросов в один. Эта возможность, если я не ошибаюсь, появилась с четвертой версии MySQL. Но имеет некоторые ограничения. 

Автор: xoslv 4.9.2008, 23:18
А возможнали такая конструкция?
Код

SELECT p.id, p.aid, a.a_name, a.count, p.price, (SELECT `ord1` FROM `container`WHERE a.a_id=container.as_id...) AS order FROM prices p, assort a 
WHERE p.aid=a.a_id and p.gid='$client_group' and a.a_status='1' 


На сколько правильна такая конструкция и будет ли она работать? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)