我们有一个大约有40000个id的表 - 其中一些ID是其他ID的父级(后来其中一些是不同表中其他ID的父级)。我想使用魔法,持久性和一些联接通过查询包含所有子ID(称为排列)的字段来确定哪些类别相关。
所以它的工作方式是分类表:
id name arrange
16 Alarms c,119|c,117|c,4607|c,3366|c,709|c,4204|c,624|c,626|c,625|c,4203|c,4201|c,4202
119 Carbon Monoxide i,21434|i,272|i,274|i,28451
产品表然后有i,项目来自
id name
272 Aico EI205ENA
274 AICO EI225EN
基本上我正在对第三个订单表运行查询,并希望使用连接创建一个表,如下所示:
order date id name id name id name quantity price
13-06-2013 16 Alarms 119 Carbon Monoxide 272 Aico EI205ENA 2 10.00
目前我有:
select * from cart c
join prods p on p.id = c.item
where order_status = ''
and date_ordered != '0000-00-00'
order by date_added desc;
简单连接我现在想要添加第一个示例中的类别,我如何查询数组以获得我想要的内容?
(如果它有助于我们有3个表格,我对购物车,产品和类别感兴趣)。
提前致谢!
答案 0 :(得分:0)
我现在已经意识到表格是如何结合在一起的。
您可以通过以下方式实现目标。这将是缓慢的,我把它放在这里的主要原因是显示它是多么令人讨厌和不可读,作为对数据库规范化的鼓励。
SELECT *
FROM cart c
INNER JOIN prods p
ON p.id = c.item
INNER JOIN Category z1
ON FIND_IN_SET(CONCAT('i-', p.id), REPLACE(REPLACE(z1.arrange, 'i,', 'i-'), '|', ',')) > 0
INNER JOIN Category z2
ON FIND_IN_SET(CONCAT('c-', z1.id), REPLACE(REPLACE(z2.arrange, 'c,', 'c-'), '|', ',')) > 0
WHERE order_status = ''
AND date_ordered != '0000-00-00'
ORDER BY date_added DESC
FIND_IN_SET是一个在逗号分隔列表中查找值的函数。这是在您的分隔列表中,更改 i,的所有实例并将其更改为 i - ,然后更改 | 的所有实例并更改他们逗号。然后,它会在结果以逗号分隔的列表中查找与连接的i-连接。然后再次对类别进行加入以获得父类别的匹配。