SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.04.2014 01:48:05

lekraft
Участник
Зарегистрирован: 09.04.2014
Сообщений: 4

Выборка и запись

Здравствуйте!
Имеется объемная бд более 50 тыс. записей (каталог). Есть две главные колонки name (по который нужно осуществить запрос) и class (которую нужно заполнить). В колонке name есть сочетания с ключевым словом, по которому можно осуществить поиск. Однако всё это осложняется количеством товаров. Встаёт такой вопрос:
Можно ли каким - либо образом выполнить такую выборку, чтобы во всех одинаковых ячейках(а такие отличаются только uid колонкой по которой в дальнейшем будет формироваться подбор товаров к другому каталогу, в качестве альтернативы) была запись допустим class1 в колонке class ,но уже в следующей группе повторяющихся ячеек в колонке class2 и т.д. class3, class4 ... class100?

Есть ещё такой вариант проверить таблицу на наличие повторяющихся колонок и получить список всех уникальных ячеек в колонке name, затем с помощью данного списка уже выполнить запись class1, class2, class3 и т.д. по точному значению ячейки. (однако увы некоторые содержат только слово и имеют дополнительный параметры, но это уже возможно рассортировать вручную).

Главная проблема - получение всех уникальных ячеек, может быть сталкивались с подобной проблемой (хотя бы этого уже хватит чтобы создать хоть какую - то структуру). Заранее спасибо.

Отредактированно lekraft (09.04.2014 01:48:43)

Неактивен

 

#2 09.04.2014 03:20:58

lekraft
Участник
Зарегистрирован: 09.04.2014
Сообщений: 4

Re: Выборка и запись

Надоело фантазировать, решил проблему так:


    $q = "SELECT DISTINCT `name` FROM `bosch_cat`";
    $r = mysql_query($q) OR die('Не сработал запрос');
    $fd = fopen("log.txt", "w");
    for($i = 0; $i < mysql_num_rows($r); $i++)
            {
            $row = array();
            $row = mysql_fetch_array($r);
            $class = 'class'.$i;
            $q2 = "UPDATE bosch_cat SET class='".$class."' WHERE name='".$row['name']."'";
            $r2 = mysql_query($q2) OR die('Процесс прервался');
            $order = "Записан:".$class."\r\n";
            fwrite($fd, $order);
            }
    fclose($fd);        
    echo 'Процесс окончен';
 

Отредактированно lekraft (09.04.2014 08:25:52)

Неактивен

 

#3 09.04.2014 08:27:48

lekraft
Участник
Зарегистрирован: 09.04.2014
Сообщений: 4

Re: Выборка и запись

Таким образом удалось классифицировать 56 тыс. объектов в 539 групп, но вопрос так и остаётся, можно ли склеить это всё SQL запросом. Может сам смогу составить, обязательно поделюсь если найду стопроцентный вариант без использования php.

Отредактированно lekraft (09.04.2014 08:29:37)

Неактивен

 

#4 09.04.2014 11:50:57

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

Re: Выборка и запись

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

Неактивен

 

#5 09.04.2014 13:06:03

lekraft
Участник
Зарегистрирован: 09.04.2014
Сообщений: 4

Re: Выборка и запись

vasya написал:

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

Буду вам признателен

Неактивен

 

#6 09.04.2014 18:20:56

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

Re: Выборка и запись

create table test (
id int not null auto_increment primary key,
name int,
class varchar(100));

insert into test (name) values(2),(2),(3),(2),(4),(4);

UPDATE test,
(select t.*, @i:=@i+1, concat('class',@i) class from (select name from test group by 1) t, (select @i:=0) x order by name) t1
SET test.class=t1.class
WHERE test.name=t1.name;


Чтобы проще было разобраться рекомендую посмотреть
http://webew.ru/articles/3923.webew

Неактивен

 

Board footer

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