Хорошо - потому что я, кажется, путаю людей с моей целью, я собираюсь предоставить эту отправную точку:
SELECT 'car_data' FROM 'parts' WHERE 'car_data' LIKE '%|2011|ford|%'
Это выражение возвращает car_data для каждой части, которая работает для ford 2011 года. Один из этих строк выглядит так:
61156|SUV|2003|FORD|EXCURSION||6.0L DIESEL V8||||
61156|SUV|2011|FORD|EXCURSION||6.0L DIESEL V8||||
61156|SUV|2005|FORD|EXCURSION||6.0L DIESEL V8||||
61156|Truck|2001|GMC|SIERRA 2500 HD||6.6L DIESEL V8||||
61156|Truck|2002|GMC|SIERRA 2500 HD||6.6L DIESEL V8||||
61156|Truck|2007|DODGE|RAM 3500 PICKUP|ST|5.9L DIESEL L6||||
61156|Truck|2007|DODGE|RAM 3500 PICKUP|TRX4|5.9L DIESEL L6||||
61156|Truck|2003|FORD|F-250 SUPER DUTY PICKUP||6.0L DIESEL V8||||
61156|Truck|2011|FORD|F-250 SUPER DUTY PICKUP||6.0L DIESEL V8||||
61156|Truck|2005|FORD|F-250 SUPER DUTY PICKUP||6.0L DIESEL V8||||
Обратите внимание, что эта конкретная часть работает и для других автомобилей (большинство из них). Каждая строка данных, возвращаемая из моего SQL-запроса выше, возвращает результат, аналогичный приведенным выше данным. car_data
- это большое текстовое поле, содержащее все вышеперечисленные данные.
Мне нужно фильтровать каждую строку данных, которые отображаются и отображают ТОЛЬКО модели автомобилей (5-й столбец в разделительном тексте), которые относятся к ford 2011 года. Пример:
EXCURSION
F-250 SUPER DUTY PICKUP
Да, как отметил Джейк Фейсел, нормализовать данные, или:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5) as model
FROM data
GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5)
value
, '|', 4), '|', - 5) в качестве модели FROM data_table
WHERE value
LIKE '% | 2010 | ford |%' GROUP BY SUBSTRING_INDEX (SUBSTRING_INDEX ( value
, '|', 4), '|', - 5)
Я все еще не совсем понял, что вам нужно вернуть, но если вы пытаетесь получить только модель, а не "обрезку" (из-за отсутствия лучшего описания), тогда
SELECT DISTINCT(model) FROM car_info;
Затем заимствование из решения @Uboonto:
SELECT DISTINCT(SUBSTRING_INDEX(SUBSTRING_INDEX(car_data, '|', 4), '|', -5))) from car_info;
должен сделать трюк.
Если MySQL жалуется, вы должны уметь:
SELECT DISTINCT(<not sure what the name would be>) FROM
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(car_data, '|', 4), '|', -5)) from car_info;
вы можете сделать это в php, как будто вы разбиваете каждую строку на массив и каждый массив из этого вы добавляете в один массив после того, как вы пишете som рекурсивную функцию сортировки по столбцу, который вам нужен, вам понадобится функция uasort.
EDIT - MySQL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ci.data, '|', -7),'|',1) from
(select distinct data from car_info)
F-250 SUPER DUTY PICKUP KING RANCH
не будет отличаться от моделиF-250 SUPER DUTY PICKUP LARIAT
или это не имеет значения?