我希望有人可以帮我解决问题。
我使用以下查询
$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
这可能吗?
答案 0 :(得分:0)
对于那些将来可能遇到此问题的人来说,这是我最终使用的查询......
$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">✔</div>'.$pattern_for.''; } else { echo '<div class="tick-box"></div>'.$pattern_for.''; } echo '</li></a>';
}
我希望有一天能帮助别人。
谢谢 丹