我想忽略数据库中的重复项,当我设置“LIMIT 0,50”,然后“LIMIT 50,50”然后LIMIT .....我将需要扫描重复项仅在1列我的桌子,不是所有的栏目。我无法合并重复项,因为它们在某种程度上是不同的:这些重复项具有不同的价格。
更确切地说,我需要显示这些项目的清单,但要在右侧显示不同的价格。
我需要一个精确的数字(50)每页,所以我不能加载少,然后转到下一页。因此,我可以从头开始加载更多(如果我在远页上更改最大和先前的偏移量),如果我忽略重复项,我将获得每页50个,我将获得良好的页数显示在最后。
我是PHP的初学者,我不知道如何做到这一点。也许预先扫描所有表,然后开始编写我的代码,灵活使用我的扫描变量LIMIT和一切?我需要什么功能?怎么样?
否则,做一些预先编程的东西或者我不知道它存在的php函数可以解决这个问题吗?或者我真的需要得到头脑xD
答案 0 :(得分:1)
您可以逐项分组,并使用GROUP_CONCAT
显示不同的价格表?这样您仍然可以使用LIMIT 50
。如果price列是数字,则将其强制转换为VCHAR。
答案 1 :(得分:1)
我不完全确定你在问什么,但我想你可能想要按照以下方式做一个总结陈述:
select
itemID,
group_concat(itemPrice)
from
yourTable
group by
itemID
limit 50
这将带回50个项目的列表和第二个列,其中所有价格组合在一起。然后在您的PHP代码中,您可以explode()
第二列保持原样。
编辑:如果选择每个字段,则无法使用聚合函数。如果要选择其他不同的列,请按以下部分将它们添加到select和group:
select
itemID,
itemName,
itemSomething,
itemSomethingElse,
group_concat(itemPrice)
from
yourTable
group by
itemID,
itemName,
itemSomething,
itemSomethingElse
limit 50
答案 2 :(得分:0)
我承认我从其他答案中借用了group_concat()
函数:)
从docs:
阅读本段后The default behavior for UNION is that duplicate rows are removed from the result.
The optional DISTINCT keyword has no effect other than the default because it also
specifies duplicate-row removal. With the optional ALL keyword, duplicate-row removal
does not occur and the result includes all matching rows from all the SELECT statements.
假设下表(testdb.test
):
ID Name Price
1 Item-A 10
2 Item-A 15
3 Item-A 9.5
4 Item-B 5
5 Item-B 4
6 Item-B 4.5
7 Item-C 50
8 Item-C 55
9 Item-C 40
您可以分页此表行(9行)或组(3组,基于项目的名称)。
如果您想根据项目组分页,这应该会有所帮助:
SELECT
name, group_concat(price)
FROM
testdb.test
GROUP BY name
LIMIT 1 , 3
UNION SELECT
name, group_concat(price)
FROM
testdb.test
GROUP BY name
LIMIT 0 , 3; -- Constant 0, range is the same as the first limit's
如果你想根据所有项目来分页你的东西(我不认为这是你要求的,但万一它可以帮助其他人),这应该有所帮助:
SELECT
name, price
FROM
testdb.test
LIMIT 1 , 5
UNION SELECT
name, price
FROM
testdb.test
LIMIT 0 , 5; -- Constant 0, range is the same as the first limit's
需要注意的一件非常重要的事情是如何修改限制。第一个限制是您的密钥,您可以从任何限制开始,只要它是< = count(*)
,但您必须具有与第二个限制相同的范围(即3
in第一个示例和第二个示例中的5
)。第二个限制将始终从0
开始,如图所示。
我很喜欢这方面的工作,希望这会有所帮助。