Php 使用PDO设置限制时忽略数据库副本

Php 使用PDO设置限制时忽略数据库副本,php,mysql,pdo,duplicates,limit,Php,Mysql,Pdo,Duplicates,Limit,我想在设置“限制0,50”,然后设置“限制50,50”,然后设置限制时忽略数据库中的重复项。。。。。我只需要扫描表中1列的重复项,而不是一次扫描所有列。我不能合并副本,因为它们在某种程度上是不同的:这些副本有不同的价格 更准确地说,我需要显示这些项目的列表,但要在右侧显示它们的不同价格 我需要一个精确的数字(50)每页,所以我不能加载少于然后转到下一页。因此,我可以从一开始就加载更多内容(如果我在一个较远的页面上,则更改最大偏移量和以前的偏移量),如果我忽略重复的内容,则每页将精确加载50个,并

我想在设置“限制0,50”,然后设置“限制50,50”,然后设置限制时忽略数据库中的重复项。。。。。我只需要扫描表中1列的重复项,而不是一次扫描所有列。我不能合并副本,因为它们在某种程度上是不同的:这些副本有不同的价格

更准确地说,我需要显示这些项目的列表,但要在右侧显示它们的不同价格

我需要一个精确的数字(50)每页,所以我不能加载少于然后转到下一页。因此,我可以从一开始就加载更多内容(如果我在一个较远的页面上,则更改最大偏移量和以前的偏移量),如果我忽略重复的内容,则每页将精确加载50个,并且我将获得最后显示的良好页数

我是一个PHP初学者,我不知道怎么做。也许可以先扫描所有的表,然后开始编写代码,灵活处理扫描的限制变量和所有内容?我需要什么功能?怎么做


否则,做一些预先编程或php函数,我不知道它存在可以解决这个问题?或者我真的需要一个headhache xD

也许你可以按项目分组,并使用
group_CONCAT
显示不同的价目表?这样,您仍然可以使用
限制50
。如果价格列是数字列,请将其转换为VCHAR。

我不完全确定您的要求,但我认为您可能希望按照以下内容进行汇总陈述:

select
    itemID,
    group_concat(itemPrice)
from
    yourTable
group by
    itemID
limit 50
这将返回一个包含50个项目的列表和第二列,其中所有价格都分组在一起。然后在PHP代码中,您可以将第二列保持原样

编辑:如果选择每个字段,则不能使用聚合函数。如果要选择其他不会不同的列,请将它们添加到select和group by部分,如下所示:

select
    itemID,
    itemName,
    itemSomething,
    itemSomethingElse,
    group_concat(itemPrice)
from
    yourTable
group by
    itemID,
    itemName,
    itemSomething,
    itemSomethingElse
limit 50

我承认我从其他答案中借用了
group\u concat()
函数:)

在阅读本段后:

假设下表(
testdb.test
):

您可以将此表分页为行(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
如果您希望根据所有项目对您的项目进行分页(我不认为这是您所要求的,但只是为了防止它对其他人有帮助),这应该会有帮助:

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

需要注意的一件非常重要的事情是如何修改限制。第一个限制是你的关键,你可以从你想要的任何限制开始,只要我可以这样选择:选择*,group_concat(itemPrice),而“*”已经包括了“itemPrice”,我直接在group_concat()之后设置了它?我不太清楚你的意思。您刚才编写的查询似乎没有意义。“问题”是什么意思?我刚刚编辑了我的帖子,堆栈溢出将我的“*”符号更改为“”(什么都并没有)不,你们不能这样做。为您添加对我的帖子的编辑。