好的 - 因为我似乎在困扰人们的目标,我将提供这个起点:
SELECT `car_data` FROM `parts` WHERE `car_data` LIKE '%|2011|ford|%'
此Statement返回适用于2011 ford的每个部分的car_data。这些行中的一个看起来像:
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
是一个大文本字段,其中包含上述所有数据。
我需要过滤显示的每一行数据,并仅显示2011年福特的汽车模型(分隔文本中的第5列)。例如:
EXCURSION
F-250 SUPER DUTY PICKUP
答案 0 :(得分:1)
是的,正如Jake Feasel所指出的那样,数据正常化,或者:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5) as model
FROM data
GROUP BY SUBSTRING_INDEX(SUBSTRING_INDEX(data, '|', 4),'|',-5)
答案 1 :(得分: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;
答案 2 :(得分:0)
你可以在php中这样做,就像你将每一行拆分成一个数组,然后你将每个数组添加到一个数组中,然后根据你想要的列编写som递归函数排序,你将需要uasort函数。
答案 3 :(得分:0)
编辑 - MySQL
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ci.data, '|', -7),'|',1) from
(select distinct data from car_info)