php - MySQL 查询 SELECT 与 IF(xxxx 已存在) 递归

标签 php mysql sql

我需要您对这个自定义查询的帮助,这对我来说有点太难了。这是 my_table 的示例:

_______________________________
|  item_name   |  item_slug   |
-------------------------------
| Black Pant   | pant_black   | Select   :  pick first color, 'pant' doesn't exists
| Red Pant     | pant_red     | Variation:  'pant_black'
| Yellow Pant  | pant_yellow  | Variation:  'pant_black'
| Tshirt       | tshirt       | Select   :  'tshirt' exists
| Tshirt Black | tshirt_black | Variation:  'tshirt'
| Tshirt Red   | tshirt_red   | Variation:  'tshirt'
| Tshirt Yellow| tshirt_yellow| Variation:  'tshirt'
-------------------------------

我尝试得到的结果是:

如果('tshirt' && 'tshirt_black' 存在):

不要显示“tshirt_black”、“tshirt_red”、“tshirt_yellow”颜色并将它们放入“variations”数组中:

tshirt
|   Variations:
|-> tshirt_black
|-> tshirt_red
|-> tshirt_yellow

如果(“pant”不存在&&“pant_black”存在):

采用找到的第一个颜色“pant_black”,不显示“pant_red”、“pant_yellow”颜色并将它们放入“variations”数组中:

pant_black
|   Variations:
|-> pant_red
|-> pant_yellow

注意:“裤子”不存在,仅存在颜色。

当无色名称存在('tshirt')时,我设法通过以下查询使其工作:

SELECT * FROM my_table WHERE item_name NOT LIKE '% Black' AND item_name NOT LIKE '% Red' AND item_name NOT LIKE '% Yellow'

然后,我在 PHP foreach() 中应用第二个查询,将“Tshirt”变体放入数组中。

SELECT * FROM my_table WHERE item_slug LIKE '$item_slug%' AND item_slug != '$item_slug'

但我找不到一种方法来递归检查 if('pant' didesn't Exes),然后使用找到的第一个颜色作为“基础”。例如“pant_black”。

完美的解决方案是使其成为一体化查询。你觉得怎么样?

编辑:编辑我的帖子以仅使用“item_slug”。

最佳答案

如果您想获取两列,一列包含基本名称,另一列包含变体(如果是基本名称则为 NULL),那么您可以添加一个标志来查找基本名称。

也许这接近你想要的:

select ColorlessName,
       (case when item_name <> ColorlessName then item_name end) as variation
from (select t.*,
             (select t2.item_name
              from my_table t2
              where substring_index(t2.item_slug, '_', 1) = substring_index(t.item_slug, '_', 1)
              order by length(t2.item_name) desc, t2.item_name
              limit 1
             ) as ColorlessName
      from my_table t
     ) t
order by ColorlessName, (variation is null) desc;

关于php - MySQL 查询 SELECT 与 IF(xxxx 已存在) 递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29795771/

相关文章:

php - 如何从 php 从 android 推送通知

mysql - 字段类型 'DATE' 的可能值的真实范围是多少?

php - 选择后保持下拉框的持久状态

php - 如何放宽 PHP 的 open_basedir 限制?

php - 这可能吗?从 PDF 到可编辑表格

mysql - 选择一行mysql条件的多行

javascript - SQL 高级搜索/忽略空查询

mysql - 如何显示 SQL 中字段中输入的数据总数

javascript - 如何在 jQuery 中更改选择时传递 php 数组?

php - 比较mysql中的两个字段