Как превратить этот SELECT в DELETE - PullRequest
0 голосов
/ 24 октября 2011

У меня есть набор данных, которые мне нужно «очистить»

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

Например, ниже приведены данные, которые я имею для продуктов Paco Rabanne 1 Million - однако я хочу, чтобы они выбрали Paco Rabanne 1 Million, но я не хочу, чтобы у них был выбор различных лосьонов, мыла, дезодоранта и т. Д. и т.д. Меня интересует марка и выбор аромата.

Пример данных, которые я имею, показан ниже.

Paco Rabanne 1 Million Gift Set
Paco Rabanne 1 Million Deodorant Stick 75ml
Paco Rabanne 1 Million Deodorant
Paco Rabanne 1 Million Eau de Toilette
Paco Rabanne 1 Million Gift Set 50ml
Paco Rabanne 1 Million Shower Gel 150ml
Paco Rabanne 1 Million Eau De Toilette Spray 100ml
Paco Rabanne 1 Million After Shave Lotion 100ml

У меня есть запрос, который вынимает определенные слова из заголовка элемента и показывает, что осталось

Запрос:

select DISTINCT( TRIM( LEFT(title, 
        IF( LOCATE('Deodorant', title), LOCATE('Deodorant', title) - 1, 
            IF( LOCATE('Shower', title), LOCATE('Shower', title) - 1, 
                IF( LOCATE('Refillable', title), LOCATE('Refillable', title) - 1,
                    IF( LOCATE('Spray', title), LOCATE('Spray', title) - 1,
                        IF( LOCATE('ml', title), LOCATE('ml', title) - 1,
            999
        )
    )
  )
))))) FROM `PRprod_FRAGRANCES`

Это в основном выбирается из таблицы, при этом пропуская любую дублирующую строку с дезодорантом в заголовке, или с душем и т. Д. И т. Д., Но я хочу постоянно удалять записи вместо выполнения этого запроса каждый раз, что дорого, поскольку в таблице более 200 000 строк

По сути, я хочу перевернуть запрос, чтобы он не отображал строки, которые мне не нужны, но вместо этого фактически удаляет их.

Разве есть другой способ решения этой проблемы?

Это определение таблицы:

field, type, NULL, Key, Default, Extra

autoc_id, int(11), NO, PRI, , auto_increment
title, varchar(128), YES, , , 
genre, varchar(128), YES, , , 
author, varchar(128), YES, , , 
actors, varchar(256), YES, , , 
artist, varchar(128), YES, , , 
main_category, varchar(128), NO, , , 
dateadded, timestamp, NO, , CURRENT_TIMESTAMP, 

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Ваш вопрос все еще немного расплывчат.

В вашем примере у вас есть данные ...

Paco Rabanne 1 Million Gift Set
Paco Rabanne 1 Million Deodorant Stick 75ml
Paco Rabanne 1 Million Deodorant
Paco Rabanne 1 Million Eau de Toilette
Paco Rabanne 1 Million Gift Set 50ml
Paco Rabanne 1 Million Shower Gel 150ml
Paco Rabanne 1 Million Eau De Toilette Spray 100ml
Paco Rabanne 1 Million After Shave Lotion 100ml

Есть ли в вашей таблице какие-либо другие поля? Например, идентификатор и т. Д.? Или это только одно поле?

А приведенные выше примеры появляются только один раз, или они появляются несколько раз каждый?


Разделение ваших данных на группы на основе вашего кода дает следующие группы ...

Original                                           | After Processing

Paco Rabanne 1 Million Deodorant                   | Paco Rabanne 1 Million
Paco Rabanne 1 Million Deodorant Stick 75ml        | Paco Rabanne 1 Million
Paco Rabanne 1 Million Shower Gel 150ml            | Paco Rabanne 1 Million

Paco Rabanne 1 Million Eau De Toilette Spray 100ml | Paco Rabanne 1 Million Eau De Toilette Spray 10

Paco Rabanne 1 Million Gift Set 50ml               | Paco Rabanne 1 Million Gift Set 5

Paco Rabanne 1 Million After Shave Lotion 100ml    | Paco Rabanne 1 Million After Shave Lotion 10

Paco Rabanne 1 Million Gift Set                    | Paco Rabanne 1 Million Gift Set

Paco Rabanne 1 Million Eau de Toilette             | Paco Rabanne 1 Million Eau de Toilette

Примечание: я думаю, вам не нужен - 1 в фильтре ml. 100ml превращается в 10.

В случае с первой группой, хотите ли вы, чтобы все записи были удалены и заменены одной записью с надписью Paco Rabanne 1 Million Deodorant? Или вы хотите, чтобы 2 из них были удалены, и оставить 1 из них? И если да, то как нам определить, что оставить?

В случае следующих трех групп каждая группа имеет только 1 запись, но вы отрубили 0ml с конца. Вы хотите заменить эти записи сокращенной версией? Или ничего с ними не делать?

Последние две группы также имеют только 1 запись в каждой, и фильтр ничего не сделал с ними. Они остались одни?


Тогда, после того, как вы обработали это, будут ли новые данные добавляться снова и снова? Вам нужен код, который вы можете запускать несколько раз, или вам нужно сделать это всего за один запуск?


К сожалению, без дополнительной информации я не думаю, что мы сможем чем-то помочь.

0 голосов
/ 24 октября 2011

Для меня это больше похоже на неадекватную модель данных:

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

...