gpt4 book ai didi

php - MySQL 对多个表进行合并和加权排序

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

编辑

根据此处的反馈,我简化了我的问题并将信息拆分到独立的表格中。

sqlfiddle here

表格产品

id(int(11), name(varchar(80))
1, 'Product A'
2, 'Product B'

表格特征

id(int(11), name(varchar(80)), weight(int(11))
1, 'Price', 10
2, 'Age', 6

id(int(11), productid(int(11), featureid(int(11), value(varchar(80))
1, 1, 1, '$0.99'
2, 1, 2, '10+'
3, 2, 1, '$2.49'
4, 2, 2, '10+'

问题#1

我有两种产品。我想查询我的数据库以显示所有产品的所有值:

Get all unique values for all products
Result:
1. $0.99
2. 10+ (<- this is a duplicate, so I only want it once)
3. $2.49

如何查询?

问题#2

我有两个选定的值。我想查询我的数据库以显示基于我的值的产品排序列表:

Get all products sorted by weight
My selected values are :
Value 1 = '$2.49'
Value 2 = '10+'

Result:
1. Product B (weight 16)
2. Product A (weight 6)

产品 B 应该是第一个结果,因为两个选定值都有匹配项($2.49 和 10+)。这些匹配链接到 features.weight 10 和 6。

如何查询?

旧的,请忽略

这是 sqlfiddle:

http://sqlfiddle.com/#!9/47a932/2

我在使我的查询正常工作时遇到了真正的麻烦,并且不确定如何解决这个问题。非常感谢任何指点。

我想要实现的是一个基于我保存在另一个表中的特征的加权和排序的产品列表。此表包含功能名称以及各个产品的功能值。

用例:

我的网站上有两个选择框:一个名为“价格”,另一个名为“年龄”。这些显示

价格

  • 0.99 美元
  • 1.19 美元
  • 2.49 美元

年龄

  • 6+
  • 10+

我有两个 MySQL 表:“feature”和“product”

表格“特征”

这张表包含了我所有的特征和特征内容

#########################################################################
# ID, catid, subcatid, productid, featureid, featurename, value, weight #
# 1, 1, NULL, NULL, 1, price, NULL, NULL #
# 2, 1, NULL, NULL, 2, age, NULL, NULL #
# 3, NULL, 1, 1, 1, NULL, $0.99, 10 #
# 4, NULL, 2, 1, 2, NULL, 10+, 6 #
# 5, NULL, 1, 2, 1, NULL, $2.49, 10 #
# 6, NULL, 2, 2, 2, NULL, 6+, 6 #
# 7, NULL, 1, 3, 1, NULL, $1.19, 10 #
# 8, NULL, 2, 3, 2, NULL, 10+, 6 #

表“产品”

这张 table 放着我所有的产品

############################
# ID, catid, name, image #
# 1, 1, ABC, ABC.png #
# 2, 1, DEF, DEF.png #
# 3, 1, GHI, GHI.png #
# 4, 1, JKL, JKL.png #

我使用的查询是:

$categoryid  = '1';
$selectage = '10+';
$selectprice = '$1.19';

$query = '
SELECT * FROM feature
LEFT JOIN product ON feature.productid=product.id
WHERE (feature.productid IS NOT NULL AND product.catid='.$categoryid.')
AND (feature.value='.$selectage.' AND feature.value='.$selectprice.')
GROUP BY product.id
ORDER BY weight ASC';

不幸的是,这不会产生任何可用的东西。我喜欢输出如下:

#####################
# Results #
# productid, weight #
# 3, 16 # matched 2x feature.value -> weight 10+6 = 16
# 1, 6 # matched 1x feature.value -> weight 6
# 2, 0 # matched 0x feature.value -> weight 0 = 6

基本上,我想计算所有匹配值并将它们的权重加在一起,最终得到一个基于权重总和的排序列表。

也许我遗漏了什么或者我的数据库结构完全错误。

给予帮助的每个人永恒的源代码信用。 (会提供截图!)

最佳答案

SQL Fiddle Demo

问题 1:

SELECT DISTINCT `value`
FROM `values`;

问题 2:

SELECT p.`name`, SUM(f.`weight`) as total_weight
FROM `products` p
JOIN `values` V
ON P.`id` = V.`productid`
JOIN `features` F
ON F.`id` = V.`featureid`
WHERE
V.value IN ( '$2.49', '10+')
GROUP BY p.`name`
ORDER BY total_weight DESC;

关于php - MySQL 对多个表进行合并和加权排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36456315/

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