Поиск строк данных в столбце в SQL

0

Хорошо - потому что я, кажется, путаю людей с моей целью, я собираюсь предоставить эту отправную точку:

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
  • 0
    Разве F-250 SUPER DUTY PICKUP KING RANCH не будет отличаться от модели F-250 SUPER DUTY PICKUP LARIAT или это не имеет значения?
  • 3
    Реальный ответ - переместить это в нормализованную структуру базы данных. Почему ты не можешь сделать это?
Показать ещё 3 комментария
Теги:

4 ответа

1

Да, как отметил Джейк Фейсел, нормализовать данные, или:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5) as model
FROM data
GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5)
  • 0
    Это близко - но он возвращает только самую первую строку данных с разделителями во всем столбце. Нужно вернуть те, которые соответствуют моему поисковому запросу. Вот пример: SELECT SUBSTRING_INDEX (SUBSTRING_INDEX ( value , '|', 4), '|', - 5) в качестве модели FROM data_table WHERE value LIKE '% | 2010 | ford |%' GROUP BY SUBSTRING_INDEX (SUBSTRING_INDEX ( value , '|', 4), '|', - 5)
  • 0
    тогда то, что вы написали, должно работать. Вы пытались выполнить этот запрос?
0

Я все еще не совсем понял, что вам нужно вернуть, но если вы пытаетесь получить только модель, а не "обрезку" (из-за отсутствия лучшего описания), тогда

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;
  • 0
    Карлсон - это не сработает, к сожалению. Большая проблема этого проекта заключается в том, что car_info - это фактически столбец. Все эти данные, которые я разместил в своем исходном сообщении, являются данными в столбце. Это куча данных, разделенных "|" характер. Поддельный стол.
0

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

  • 0
    Да - я знаю, что могу запустить его через PHP - но я бы предпочел втиснуть как можно больше в один оператор SQL. Может быть до 2000 записей. И для каждой из этих записей - может быть 5000 строк данных с разделителями (пример выше).
0

EDIT - MySQL

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ci.data, '|', -7),'|',1) from 
(select distinct data from car_info)
  • 0
    Извините, я проверил это, но я думаю, что это будет работать для вас
  • 0
    @Avisra: Пожалуйста, проверьте этот запрос, я думаю, что столбец, который содержит весь текст с разделителями, является столбцом данных, поэтому я выбираю данные о разнице, а затем модель из этих данных об округе.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню