gpt4 book ai didi

php - 来自同一列的所有值组合

转载 作者:行者123 更新时间:2023-11-29 02:50:14 27 4
gpt4 key购买 nike

我在 mysql 用户和项目中有两个表。

 user
ID | session| item |
1 | 1 |A |
2 | 1 |B |
3 | 1 |C |

item
id | item| price | Images
1 | A | 10 | link
2 | B | 5 | link
3 | C | 5 | link
4 | D | 5 | link

这两个表与项目相关,在“用户”表中我传递了数据表单,用户可以在其中选择一到五个项目。例如, session 编号为 1,而不是使用 session 开始功能创建的字母数字值。

我使用 select 语句显示并循环显示项目的图像:

 $select = "select item, price , images";
$from = " from item as i, customer as t";
$where = " where i.item = t.item and t.session = '".$session."'";
$sql = $select . $from . $where;
 $r=$dbh->prepare($sql);
$r->execute();
echo "<ul class=\"tab\"><li class=\"col1\"><strong>item<strong>";

while($row=$r->fetch(PDO::FETCH_ASSOC)) {
echo "<img src=\".$row['Images']."\">\n";
}
echo "</li></ul";

Blockquote

以这种方式,在示例 session 1 abc 中,我仅显示用户的请求。

我想显示项目表的所有其他项目组合,ab ac ad abc 等,但我不知道如何设置代码 php。

最佳答案

可能还有其他方法可以做到这一点,但这里是 mysql 中的一种。第一个内部选择(T1)只是获取从 1 向上计数到任何数字的数字列表,如果你有很多组合数量更高的项目,你可以添加到这个查询)。第二个内部选择(T2)只是获取项目和价格并为每个项目打开一个位位置,然后外部选择内部连接它们,其中 num 的位打开它选择该项目。GROUP_CONCAT() 将它们连接起来,而 SUM() 只返回该组合的总价格。

SELECT DISTINCT
GROUP_CONCAT(T2.item ORDER BY T2.item SEPARATOR '' ) as items,
SUM(T2.price) as total_price
FROM
(SELECT a.num+b.num+c.num+d.num+e.num+f.num+g.num+1 as num
FROM
(SELECT 0 as num UNION SELECT 1)a,
(SELECT 0 as num UNION SELECT 2)b,
(SELECT 0 as num UNION SELECT 4)c,
(SELECT 0 as num UNION SELECT 8)d,
(SELECT 0 as num UNION SELECT 16)e,
(SELECT 0 as num UNION SELECT 32)f,
(SELECT 0 as num UNION SELECT 64)g
ORDER BY num ASC
)T1
INNER JOIN
(SELECT item,price,
@bit := 1 << @shift as bit,
@shift := @shift + 1 as shift
FROM item,
(SELECT @bit := 1,@shift := 0)initial
ORDER BY id ASC
)T2
ON T1.num & T2.bit > 0
GROUP BY T1.num
ORDER BY items

sqlfiddle

输出:

items   total_price
A 10
AB 15
ABC 20
ABCD 25
ABD 20
AC 15
ACD 20
AD 15
B 5
BC 10
BCD 15
BD 10
C 5
CD 10
D 5

关于php - 来自同一列的所有值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36751897/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com