首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL和产品交叉销售(XSell)

问MySQL和产品交叉销售(XSell)
EN

Stack Overflow用户
提问于 2013-09-25 07:16:08
回答 1查看 629关注 0票数 0

我正在使用的表:

代码语言:javascript
复制
       products table
|------------|-------------|
| product_id | product_sku |
|------------|-------------|
|     2345   |   G54321    |
|------------|-------------|
|     2346   |   G64321    |
|------------|-------------|

     products_xsell
|----|------------|-------------|
| ID | product_id | xsell_id    |
|----|------------|-------------|
|  3 |    2345    |   2346      |
|----|------------|-------------|
|  4 |    2346    |   2345      |
|----|------------|-------------|

我收到以下格式的csv:

代码语言:javascript
复制
SKU, Related_Items
2345,"2346,2347,2349"
112,"4840,4841,4844,4890,4891"

我可以根据XSELL表中的数据成功查询SKU,如下所示:

代码语言:javascript
复制
Select
  products.products_model As 'Displayed Product',
  products1.products_model As 'Related Item'
From
  products_xsell Inner Join
  products On products_xsell.products_id = products.products_id Inner Join
  products products1 On products_xsell.xsell_id = products1.products_id

然后返回:

代码语言:javascript
复制
|-------------------|----------------|
| Displayed Product | Related Item   |
|-------------------|----------------|
|     G54321        |   G64321       |
|-------------------|----------------|
|     G64321        |   G54321       |
|-------------------|----------------|   

我希望能够在csv文件中读取。本质上是创建一个排序的“交叉连接”来构建所有的“反向”交叉销售,然后从给定的sku中查找相关的产品id,并将它们插入到products_xsell表中。

例如,如果文件有一行sku:

代码语言:javascript
复制
2345,"2346,2347,2349"

我想建立以下几点:

代码语言:javascript
复制
2345,2346
2345,2347
2345,2349
2346,2345
2346,2347
2346,2349
2347,2345
2347,2346
2347,2349
2349,2345
2349,2346
2349,2347

从上面的skus中获取关联的产品id:

代码语言:javascript
复制
54321,64321
54321,49245
54321,99499
64321,54321
64321,49245
64321,99499
49245,54321
49245,64321
49245,99499
99499,54321
99499,49245
99499,64321

并将它们插入到products_xsell表中,以建立交叉销售和反向交叉销售关系:

代码语言:javascript
复制
     products_xsell
|------------|-------------|
| product_id | xsell_id    |
|------------|-------------|
|     54321  |   64321     |
|------------|-------------|
|     54321  |   49245     |
|------------|-------------|
|     54321  |   99499     |
|------------|-------------|
|     64321  |   54321     |
|------------|-------------|
|     64321  |   49245     |
|------------|-------------|
|     64321  |   99499     |
|------------|-------------|
|     49245  |   54321     |
|------------|-------------|
|     49245  |   64321     |
|------------|-------------|
|     49245  |   99499     |
|------------|-------------|
|     99499  |   54321     |
|------------|-------------|
|     99499  |   64321     |
|------------|-------------|
|     99499  |   49245     |
|------------|-------------|        

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2013-09-25 13:42:09

假设您有Numbers表,csv表名为csv,查询SELECT很容易创建,如下所示:

代码语言:javascript
复制
select c.sku, n.n from csv c INNER JOIN Numbers n ON 
INSTR(CONCAT(',', c.Related_Items, ','), CONCAT(',', CAST(n.n AS CHAR), ',')) > 0
UNION ALL
select n.n, c.sku from csv c INNER JOIN Numbers n ON 
INSTR(CONCAT(',', c.Related_Items, ','), CONCAT(',', CAST(n.n AS CHAR), ',')) > 0

但是您需要一个帮助者编号表格,其中填充了从1到系统中可能的最大SKU之间的值。

查看此SQL Fiddle以获取使用从2345到2349的值填充的数字的示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18993682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档