- История на поръчките
1234
WT форуми -> PHP MySQL ASP.NET -> История на поръчките
Създайте нова тема Напишете отговор 
Автор Съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1575
Мнение 20/08/2017 4:51 pm     История на поръчките Отговорете с цитат


Здравейте, как се прави история на поръчките? Имам таблица orders в която е цялата информация за поръчката. Сложил съм уникален индетификатор, вместо дата за да различавам, поръчките на един и същи клиент, но не мога да си формулирам какви заявки да правя за да се получи.

Ето примерно какво имам в таблицата. Ид 1 и 2 са една поръчка, а ид 3 друга.

orders

id | email | name | price | unic_id
----------------------------------------
1 | asd@ | Ivan | 10 | 111111

2 | asd@ | Ivan | 50 | 111111

3 | asd@ | Ivan | 20 | 222222
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Турист
Турист

Регистриран на: 24/03/2013 3:23 pm

Support: 40
Bonus: 80
Мнения: 563
Мнение 20/08/2017 5:58 pm      Отговорете с цитат


Аз не мога да разбера какво точно питаш. Имам предвид, иформацията, която си дал е малко оскъдна и неразбираема.
За мен и трите са различни, ако съдим, че ID 1 е цена 10, а ID 2 е цена 50.
Ако може малко по-подробно да обясниш какво точно искаш да се получи, има ли свързани таблици и т.н.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2951
Мнение 20/08/2017 6:43 pm     Re: История на поръчките Отговорете с цитат


teroristd написа:
Здравейте, как се прави история на поръчките? Имам таблица orders в която е цялата информация за поръчката. Сложил съм уникален индетификатор, вместо дата за да различавам, поръчките на един и същи клиент, но не мога да си формулирам какви заявки да правя за да се получи.

Ето примерно какво имам в таблицата. Ид 1 и 2 са една поръчка, а ид 3 друга.

orders

id | email | name | price | unic_id
----------------------------------------
1 | asd@ | Ivan | 10 | 111111

2 | asd@ | Ivan | 50 | 111111

3 | asd@ | Ivan | 20 | 222222


Ако правиш история на поръчките на определен потребител, то unic_id трябва да ти е равно на id-то на потребителя. Така ще обвържеш поръчката с потребителя от който е и ще направиш един селект от сесията:

SQL code:

SELECT * FROM orders WHERE unic_id=$userId


А ако просто искаш да изведеш там където се съдържат еднакви стойности:

SQL code:

SELECT unic_id
FROM orders
GROUP BY unic_id
HAVING count(*) > 1
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1575
Мнение 20/08/2017 6:48 pm      Отговорете с цитат


Искам да направя история на поръчките.

В смисъл да извеждам информацията за старите поръчки в профила на потребителя.

Нямам други свързани таблици.

В тази примерна таблица която съм дал, е все едно някакъв потребител има две поръчки. Поръчка едно съдържа примерно два предмета. Те отговарят съответно на id1 и id2 и имат едно и също unic_id. Третият запис е втора поръчка от един предмет с друго unic_id.

Трябват ли ми други таблици? Изобщо как се прави подобно нещо?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 115
Bonus: 223
Мнения: 2951
Мнение 20/08/2017 6:55 pm      Отговорете с цитат


teroristd написа:
Искам да направя история на поръчките.

В смисъл да извеждам информацията за старите поръчки в профила на потребителя.

Нямам други свързани таблици.

В тази примерна таблица която съм дал, е все едно някакъв потребител има две поръчки. Поръчка едно съдържа примерно два предмета. Те отговарят съответно на id1 и id2 и имат едно и също unic_id. Третият запис е втора поръчка от един предмет с друго unic_id.

Трябват ли ми други таблици? Изобщо как се прави подобно нещо?


Дай по-конкретен пример, защото ме объркваш малко и не схващам, какво точно си навързал. Трябва да навържеш потребителя с поръцката тоест в една от колоните да запаметяваш идентификатора на потребителя направил поръчката, за да знаеш от кой точно потребител е направена тя. Щом имаш това просто вадиш където идентификатора на потребителя съвпада в таблицата с поръчките.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1575
Мнение 20/08/2017 7:01 pm     Re: История на поръчките Отговорете с цитат


dakata__92 написа:
teroristd написа:
Здравейте, как се прави история на поръчките? Имам таблица orders в която е цялата информация за поръчката. Сложил съм уникален индетификатор, вместо дата за да различавам, поръчките на един и същи клиент, но не мога да си формулирам какви заявки да правя за да се получи.

Ето примерно какво имам в таблицата. Ид 1 и 2 са една поръчка, а ид 3 друга.

orders

id | email | name | price | unic_id
----------------------------------------
1 | asd@ | Ivan | 10 | 111111

2 | asd@ | Ivan | 50 | 111111

3 | asd@ | Ivan | 20 | 222222


Ако правиш история на поръчките на определен потребител, то unic_id трябва да ти е равно на id-то на потребителя. Така ще обвържеш поръчката с потребителя от който е и ще направиш един селект от сесията:

SQL code:

SELECT * FROM orders WHERE unic_id=$userId


А ако просто искаш да изведеш там където се съдържат еднакви стойности:

SQL code:

SELECT unic_id
FROM orders
GROUP BY unic_id
HAVING count(*) > 1


Поръчката си ми е обвързана с потребителя чрез имейла. Ако е само една аз нямам проблеми да изведа всеки един продукт от нея. Проблема е като има повече от една поръчка във времето. За това съм сложил това unic_id, за да разграничавам поръчките на един и същи потребител.

В смисъл, когато се прави нова поръчка всичко си е ок. Проблема е как да показвам старите?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Турист
Турист

Регистриран на: 24/03/2013 3:23 pm

Support: 40
Bonus: 80
Мнения: 563
Мнение 20/08/2017 7:16 pm      Отговорете с цитат


Принципно ти трябват.

Примерно:

items - id, name, description, quantity, price per unit (може и други данни, но в момента описвам накратко)

orders - id, user_id, item_id, quantity, date_added

users - id, .... (тука си наясно)

И от там вече можеш да си JOIN-ваш, за да извличаш информацията.

SQL code:

SELECT *
FROM orders
LEFT JOIN items ON orders.item_id = items.id
LEFT JOIN users ON orders.user_id = users.id
WHERE orders.user_id = @userId


По този начин просто взимаш quantity за количество, освен ако не искаш да ти се извеждат като две отделни поръчки.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1575
Мнение 20/08/2017 7:39 pm      Отговорете с цитат


Revelation написа:

По този начин просто взимаш quantity за количество, освен ако не искаш да ти се извеждат като две отделни поръчки.


Точно това искам. Искам да се извеждат като отделни поръчки.

Таблицата която съм дал е примерна за по голяма простота. Иначе си имам количество, цена, адрес, имена и други работи. Правя си аритметиката за самата поръчка, обща цена и т.н.

Както казах във всяка поръчка се записва и имейла на потребителя, и ако искам всички поръчки просто казвам select * from orders where email = $email, проблема е как да ги изведа разделени една от друга?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Турист
Турист

Регистриран на: 24/03/2013 3:23 pm

Support: 40
Bonus: 80
Мнения: 563
Мнение 20/08/2017 7:51 pm      Отговорете с цитат


Е като извикаш всички записи за конкретния потребител, ще си ги имаш разделени.
Ако искаш да групираш тези с еднакви unic_id просто използвай GROUP BY unic_id клаузата.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
lam3r4370
Активен
Активен

Регистриран на: 20/08/2008 6:12 pm

Support: 131
Bonus: 244
Мнения: 3410
Мнение 20/08/2017 8:25 pm      Отговорете с цитат


Той май иска друго - иска да раздели поръчките, примерно в поръчка 1 потребителят е поръчал items с id 1,2,3 , а в поръчка 2 - items 5,6,7

Тогава в таблица orders primary key ти е (order_id, item_id) и при финализацията на поръчката може да добавяш order_id в таблица order_history(order_id,user_id,....) с primary key (order_id,user_id)
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
raiden
Активен
Активен

Регистриран на: 08/12/2006 10:13 am

Support: 181
Bonus: 448
Мнения: 2136
Мнение 21/08/2017 7:40 am      Отговорете с цитат


Според мен трябва да дадеш пълната структура на базата, за да можем да помогнем по-адекватно.
Една примерна структура, която ще ти позволи да правиш подобни заявки:

users - id | name | email | ...
products - id | name | ...
orders - id | user_id | date | ...
orders-products - id | order_id | product_id | price | quantity | ...

По този начин всяка поръчка ще ти е свързана с определен потребител, за всяка поръчка ще имаш информация за продуктите в нея, както и цената им в момента на поръчката. Последното е изключително важно и често се пренебрегва, но в дългосрочен план цените се променят, затова е наложително (за нуждите на отчетността) да съхраняваш моментната цена. С правилната структура живота става песен:

SQL code:
--Всички поръчки на даден потребител
SELECT * FROM orders WHERE user_id = ?

--Поръчки на даден потребител, брой продукти и сума
SELECT op.order_id, count(op.product_id) as broi_produkti, sum(op.price * op.quantity) as suma
FROM orders o
JOIN orders-products op ON o.id = op.order_id
WHERE o.user_id = ?
GROUP BY op.order_id

--Най-поръчвани продукти от даден потребител
SELECT products.*, sum(op.quantity)
FROM orders o
JOIN orders-products op ON o.id = op.order_id
JOIN products ON op.product_id = products.id
WHERE o.user_id = ?
GROUP BY op.product_id
ORDER BY 2 DESC
--Или за най-поръчвани продукти изобщо - без WHERE клаузата

--И т.н., ако ти трябва нещо конкретно и не можеш да си направиш заявката ще помогна
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
teroristd
Редовен
Редовен

Регистриран на: 18/02/2010 1:50 pm

Support: 80
Bonus: 172
Мнения: 1575
Мнение 21/08/2017 10:42 am      Отговорете с цитат


Ще дам пълната структура на базата щом е необходимо, но нека преди това да се опитам да обясня отново какво точно искам, и какво се случва всъщност.

За да държим нещата прости нека да си представим че има само един потребител който се казва Иван. Той има две поръчки. Първата е била преди една седмица(14.08.17г.) и съдържа два продукта(дрехи), да кажем един чифт дънки и една блуза. Поръчката е изпълнена и продуктите са записани в таблицата orders.

PHP code:

id | name | email | product | size | order_id | price | ...
----------------------------------------------------------------------
1 | Иван | ivan@abv.bg | дънки | М | 1 | 30лв. | ...
2 | Иван | ivan@abv.bg | блуза | L | 1 | 10лв. | ...


В тази поръчка всичко е било наред, сметнал съм общата цена(40лв.), показал съм правилните снимки и т.н.

Да кажем днес(21.08.17г.) Иван прави нова поръчка. Тя съдържа един продукт, например яке. Продуктът ще се запише в таблицата orders с id - 3.

PHP code:

id | name | email | product | size | order_id | price | ...
----------------------------------------------------------------------
1 | Иван | ivan@abv.bg | дънки | М | 1 | 30лв. | ...
2 | Иван | ivan@abv.bg | блуза | L | 1 | 10лв. | ...
3 | Иван | ivan@abv.bg | яке | L | 2 | 50лв. | ...


Тук вече идва проблема. Аз искам да изведа и двете поръчки, но разделени една от друга. Лесно мога да селектирам всичко но то ще изглежда като една поръчка. Няма да се знае че преди една седмица е поръчал два продукта а сега само един. Няма да може да се сметне общата цена, на всяка отделна поръчка и т.н. Затова добавих поле order_id, за да различавам поръчките, но пак не се сещам как хем да са двете, хем да са разграничени една от друга.

Искам това което ще вижда потребителя да е нещо подобно.

PHP code:

Поръчка 1
-------------------------------------------------------------------
1 |снимка на продукта | размер | количество | цена |
2 |снимка на продукта | размер | количество | цена |
| обща цена |

Поръчка 2
-------------------------------------------------------------------
1 |снимка на продукта | размер | количество | цена |
| обща цена |
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
1234
Страница 1 от 4


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети