2012-03-29 2 views
0

Вчера дама, которая использует проданный товар, подошла ко мне с проблемой. Отчет возвращает список всех продуктов, которые мы продаем, с подсчетом за определенный период времени. В отчете было слишком много результатов в одном продукте. Линия «страница продажи» продукта также учитывала «неограниченную страницу продажи» продукта обновления, который мы продаем.MYSQL как предложение найти слишком много матчей

Это код, который дал неправильные результаты:

Select count(WorkOrderId) as cnt from tblworkorder 
where PlanName LIKE '%{$row['PlanType']}%' and RecTime BETWEEN '$stime' and '$etime' 

Проблема связана с дикими спичек карт. Однако из-за того, как мой предшественник настроил db, это необходимо. Продажей может быть несколько продуктов, каждый из которых указан по имени в столбце PlanName, разделенных запятыми. Пример,

PlanName = Sale Page, Domain Name, 
PlanName = Link, Unlimited Sale Page, 

Хотя правильный ответ 1 на каждой строке, текущий код будет возвращать:

Domain Name = 1 
Link = 1 
Sale Page = 2 
Unlimited Sale Page = 1 

Если продукт был «Продажа Page-Unlimited» Я мог бы код добавить запятую до конца имени плана, которое он ищет (например, «Страница продажи»). Поскольку проблема возникает на фронте (и я не могу гарантировать, что Страница продажи всегда будет первой в списке), это не решит эту проблему. Но это может помешать подобной проблеме в будущем.

Без реструктуризации базы данных, чтобы иметь столбец, где планы перечислены по числу (например, «P4, P16, P25», или «P1, P11») или таблицу соединений, как я могу найти только страницу продажи, а не Неограниченная страница продажи в строке, когда я запускаю отчет?

ответ

1

Вы можете попробовать использовать FIND_IN_SET, которые бы перевести на что-то вроде

SELECT 
    count(WorkOrderId) as cnt 
FROM tblworkorder 
WHERE FIND_IN_SET('{$row['PlanType']}',PlanName)>0 
    AND RecTime BETWEEN '$stime' and '$etime' 

Но реальный ответ нормализовать ваши данные таким образом, у вас есть таблица заказа и таблицу orderPlans, которая имеет столбцы внешнего ключа, ссылающихся на order_ids и plan_ids.

+0

Это даже ускорилось! И если меня попросят переписать этот проект, я ** буду нормализовать его повсюду. Но до тех пор слишком много потенциальных побочных эффектов. Я не писал это приложение для начала. –