SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.10.2011 16:42:01

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Помогите справиться с запросом

Добрый день! Помогите пожалуйста разобраться с запросом:

UPDATE katalog SET Show_ord=1
Where priority IN
(SELECT DISTINCT scu, id_photo, Status, priority From katalog k1
WHERE Status=1 AND priority=ALL(
SELECT MIN(priority) FROM katalog k2
WHERE Status=1 AND k2.scu=k1.scu))

#1241 - Operand should contain 1 column(s) - ошибка, и выделяет MIN

Неактивен

 

#2 05.10.2011 16:49:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

Where priority IN ( здесь необходимо выбрать 1 колонку, а вы выбираете несколько.

Неактивен

 

#3 05.10.2011 17:06:11

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

Не могли бы Вы тогда помочь написать правильно запрос, который обновляет Show_ord на 1 в том случае, если Status=1 и затем выбирает из полей с одинаковым scu, поле у которого минимальный priority?

Неактивен

 

#4 05.10.2011 17:15:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

Это два разных запроса: один update, другой select. Или сформулируйте точнее.

Неактивен

 

#5 05.10.2011 17:19:25

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

Есть поля с одинаковыми scu, и у них разный приоритет, а так же статус, который может быть 0 или 1. Нужно написать запрос, который выбирает из группы полей с одинаковыми scu одно поле с наименьшим приоритетом, при условии что у него status=1; и у него меняет Show_ord на 1

Неактивен

 

#6 05.10.2011 17:36:15

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

выбирает среди полей со status=1 или сначала ищет min(priority), а потом проверяет какой status?

Неактивен

 

#7 05.10.2011 17:39:05

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

сначала выбирает только поля у которых Status=1, а затем среди них ищет минимальный приоритет

я немного ранее написал запрос, который только выбирает нужные поля (без изменения Show_ord) из таблицы:

select distinct scu, Status, priority from katalog k1 where Status=1 and priority=all(select min(priority) from katalog k2 where Status=1 and k2.scu=k1.scu)

может поможет

Неактивен

 

#8 05.10.2011 17:48:12

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом


update katalog k,(select distinct scu, `Status`, priority from katalog k1 where `Status`=1 and priority=
all(select min(priority) from katalog k2 where `Status`=1 and k2.scu=k1.scu)) t
set show_ord=1
where t1.scu=t.scu and t1.`status`=t.`status` and t1.priority=t.priority;
 



http://dev.mysql.com/doc/refman/5.5/en/update.html

Неактивен

 

#9 05.10.2011 17:59:04

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

что то после проверки этого запроса - зависла БД, не выполнив его(

Неактивен

 

#10 05.10.2011 18:03:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

ошибка или просто думает долго?

Неактивен

 

#11 05.10.2011 18:08:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

В таком варианте будет работать быстрее:

update katalog k,(select scu, `Status`, min(priority) as prioroty from katalog where `Status`=1 group by scu) t
set show_ord=1
where t1.scu=t.scu and t1.`status`=t.`status` and t1.priority=t.priority;

Неактивен

 

#12 06.10.2011 12:10:27

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

при таком запросе он выдает ошибку о неизвестной колонке t1, которая по моему не определена

Неактивен

 

#13 06.10.2011 12:14:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

Замените t1 на k

update katalog k,(select scu, `Status`, min(priority) as prioroty from katalog where `Status`=1 group by scu) t
set show_ord=1
where k.scu=t.scu and k.`status`=t.`status` and k.priority=t.priority;

Неактивен

 

#14 06.10.2011 12:29:48

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

#1054 - Unknown column 't.priority' in 'where clause'

На другом форуме помогли написать запрос - и вроде бы он быстро выполняется

UPDATE
  (SELECT
    scu,
    MIN(priority) AS minimum
  FROM katalog
  GROUP BY scu) AS mink
LEFT JOIN
  katalog as k
ON
  k.scu = mink.scu AND
  k.priority = mink.minimum
SET
  k.Show_ord = 1


но не хватает знаний как внедрить его в php.

Не могли бы Вы помочь. Код кнопки с php:

<input name="Set_dublicate_product" type="submit" value="---" class="CRM_Button">

if ($_POST[Set_dublicate_product])
{
  $SQL = urlencode("SELECT * FROM $tbl_Katalog LEFT JOIN $tbl_Katalog_Names ON $tbl_Katalog.id_photo = $tbl_Katalog_Names.id_photo WHERE $tbl_Katalog_Names.id_lang = '$GLOBALS[id_lang]' AND $tbl_Katalog.Status != 2 ORDER BY $tbl_Katalog.Output_Ord");
  $path = $GLOBALS[path_post]."update_repeated.php";
 
  if($erno==0)
  {
   $thanks = "Файл Обновляется! Подождите несколько минут.";/* Осталось <span id='Time_Span'></span>";*/
   $init_timer = true;
  }


и файл update_repaeted.php:

<?  
session_start ();
@set_time_limit(0);
@error_reporting(7);
$cur_path = '../';
$always = true;
require $cur_path."BD_Block.php";
require $cur_path."Library.php";
$PHP_SELF = "update_repeated.php";

$SQL = $mysql_query("UPDATE  
    (SELECT $tbl_Katalog.scu, MIN($tbl_Katalog.priority) AS minimum FROM $tbl_Katalog
    GROUP BY $tbl_Katalog.scu) AS mink  
    LEFT JOIN $tbl_Katalog as k ON  
    k.scu = mink.scu AND k.priority = mink.minimum  
    SET k.Show_ord = 1"
);
?>


может правильнее реализовать весь код в первом файле?

Неактивен

 

#15 06.10.2011 12:41:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

soup-bubble написал:

#1054 - Unknown column 't.priority' in 'where clause'

Это называется опечатка.
Замените as prioroty на as priority


soup-bubble написал:

На другом форуме помогли написать запрос - и вроде бы он быстро выполняется

UPDATE
  (SELECT
    scu,
    MIN(priority) AS minimum
  FROM katalog
  GROUP BY scu) AS mink
LEFT JOIN
  katalog as k
ON
  k.scu = mink.scu AND
  k.priority = mink.minimum
SET
  k.Show_ord = 1

Попробуйте сами догадаться почему он не правильный smile

Неактивен

 

#16 06.10.2011 12:50:29

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

Потому что Show_ord будет равен 1 если даже статус = 0 в том случае, если scu не повторяется?

Неактивен

 

#17 06.10.2011 12:52:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

Да, и в том случае если повторяется тоже. Проверки то на статус нет.

Неактивен

 

#18 06.10.2011 12:53:44

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

А Ваш запрос действительно правильно работает!smile Спасибо огромное!
И я был бы очень благодарен если бы Вы помогли его внедрить в php.

Неактивен

 

#19 06.10.2011 12:55:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите справиться с запросом

Задайте лучше вопрос про php на webew.ru

Неактивен

 

#20 06.10.2011 12:56:14

soup-bubble
Участник
Зарегистрирован: 05.10.2011
Сообщений: 10

Re: Помогите справиться с запросом

Спасибо огромное за помощь и совет!
Вы очень выручили)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson