php - 显示包含多个值的列表

标签 php mysql

我希望有人能够帮助解决我的问题。

我正在使用以下查询

$query = $db->prepare("SELECT p.pattern_for,
c_main.name AS cat_name, c_main.slug AS cat_slug,
c_sub.name AS sub_cat_name, c_sub.slug AS sub_cat_slug
FROM products AS p
INNER JOIN categories AS c_main ON c_main.name = p.c_main
INNER JOIN categories AS c_sub ON c_sub.name = p.c_sub
WHERE p.stock_level > 0 AND p.pattern_for != ''
GROUP BY p.pattern_for
ORDER BY p.pattern_for ASC");
$query->execute();

以上工作正常,但我想让创建产品的人能够向“pattern_for”列添加大量值。

所以它可能有以下值 -

Product A - 'Men, Women, Children
Product B - 'Women'
Product C - 'Toddlers, Girls'
Product D - 'Men, Boys'
Product E - 'Girls, Women, Babies'

我需要它做的是(在查询中)使用逗号分割值,然后将它们全部显示在列表中,同时对它们进行分组,这样它只显示一次,并按字母顺序排序。

例如,上面的输出将是...

Babies
Boys
Children
Girls
Men
Toddlers
Women

这可能吗?

最佳答案

对于那些将来可能遇到此问题的人,这是我最终使用的查询...

$query_pattern_for = $db->prepare("SELECT p.pattern_for,
    c_main.name AS cat_name, c_main.slug AS cat_slug,
    c_sub.name AS sub_cat_name, c_sub.slug AS sub_cat_slug
    FROM products AS p
    INNER JOIN categories AS c_main ON c_main.name = p.c_main
    INNER JOIN categories AS c_sub ON c_sub.name = p.c_sub
    WHERE c_main.type = 0 AND c_sub.type = 0 AND p.stock_level = 0 AND p.reorder = 0 AND p.pattern_for != '' AND p.status = 1
    OR c_main.type = 0 AND c_sub.type = 0 AND p.stock_level > 0 AND p.pattern_for != '' AND p.status = 1
    GROUP BY pattern_for
    ORDER BY p.pattern_for ASC");
    $query_pattern_for->execute();
    $count_pattern_for = $query_pattern_for->rowCount();

然后是 php...

while ($row = $query_pattern_for->fetch(PDO::FETCH_ASSOC)) {

                    $get_pattern_for .= $row['pattern_for'] . ',';

                }

                $get_pattern_for = str_replace(', ', ',', $get_pattern_for);

                $get_pattern_for = explode(",", $get_pattern_for);

                $get_pattern_for = array_unique($get_pattern_for);
                $get_pattern_for = array_filter($get_pattern_for);
                sort($get_pattern_for);

                foreach($get_pattern_for as $pattern_for) {

                    $pattern_for_slug = str_replace(' ','',$pattern_for);
                    $pattern_for_slug = str_replace('/','-',$pattern_for_slug);
                    $pattern_for_slug = preg_replace('/[^\w-]/', '', $pattern_for_slug);
                    $pattern_for_slug = strtolower($pattern_for_slug);

                    echo '<a href="'.$url.'&patterns-for='.$pattern_for_slug.'"><li>'; if ($get_patterns_for == $pattern_for_slug) { echo '<div class="tick-box-selected">&#10004;</div>'.$pattern_for.''; } else { echo '<div class="tick-box"></div>'.$pattern_for.''; } echo '</li></a>';

                }

我希望有一天这可以帮助别人。

谢谢 丹

关于php - 显示包含多个值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24356733/

相关文章:

php - 从 Doctrine 查询响应数组中选择一个实体

mysql - 将以下 MySQL 查询转换为 codeigniter

python - 如何将数据存储在数据库中以标识在服务器上启动的进程

php - 使用 MySQL 查找树中的级别数

php - php 和 mysql 的查询限制问题(drupal 6)

php - 使用 php 连接到 mysql 时,仅在使用 localhost(而不是 127.0.0.1)时出现 mysql 2002 错误

php - 在数据库中记录成员生日的正确方法是什么?

php - 触发器还是 PHP 脚本?

php - YouTube Analytics(分析)API:在 channel 上查找唯一身份访问者

php - 使用javascript或php强制客户端刷新