PHP-按类别名称

时间:2019-05-01 19:59:25

标签: php mysql

我正在学习PHP,并已决定编写自己的OOP MVC框架。现在,我已经数次意识到这可能不是最明智的举动,但我的意思是要最终看到这一点。然后开始...

我的问题是创建一个基于类别的列表侧边栏,另一个基于年-月-帖子名。 我正式陷入第一个问题,更不用说第二个该死的选择了。我已经提供了一些代码和我尝试过的描述。网上缺少OOP信息令人生畏,或者也许是因为我在寻找错误的东西,我不知道。但是这些教程并没有使我了解如何以数据库位于模型文件中并且类逻辑位于类文件中的方式实际执行此操作。

排序逻辑应类似于此Array-Object-Propertyname-Value。 我希望在下面的示例中易于理解的值是类别名称,例如Javascript,PHP,HTML。我希望按该类别对我的博客文章进行排序。但这并不需要我手动在代码中输入类别名称。我想允许用户选择输入类别。 我也希望在上述类别中显示博客帖子,比如说5个最新帖子。但这对于a

来说应该不太难
for($i=0,$i<5,i++)

最终嵌套在任何解决方案中都可以用于类别排序。

我尝试了MySQLI程序解决方案,涉及多个Google搜索和教程。可以做到,但是不想按程序去做。尝试过foreach循环并嵌套多个foreach循环-根本无法解决基于共享类别名称重复的问题,或者如果尝试在SQL查询中进行分组,它只会将具有相同类别的结果分组,然后仅显示第一个组。尽管使用mysqli程序性工作进行循环,但使用pdo进行循环,无论我尝试设置哪种条件,它们都会产生无限循环。 因此,我相信,foreach是必经之路。我已阅读了有关循环和数组排序的文章,但尚未找到解决方案。我想到按键排序,因为这是我需要的,但没有适用的解决方案。 显示类别名称和日期以及所有这些都很容易。但是对于类别,我总是会得到重复。 香港专业教育学院尝试了一些逻辑,其中将类别名称分配为变量,但只是让它们都是不同的变量,这意味着仍然有重复项或每次迭代都只重写变量。 另外,数组排序还没有奏效,因为我没有任何东西可以对属性进行排序,也可以将对象转换为多维数组。当然,这可能是因为我是一个初学者并且不了解语法,但是我不打算将它们全部发布在这里。 如果您认为数组排序功能可以解决问题,那么也许举个例子,希望我能从一个新的角度来研究它。

PDO查询:

'SELECT * FROM postTable 
INNER JOIN userTable ON postTable.postUserId = userTable.id 
INNER JOIN postCategories ON postTable.postCategoryId = postCategories.categoryName 
ORDER BY postTable.postDate DESC'

也尝试添加

GROUP BY categoryName

,但是使用var_dump时,每个类别仅显示一个条目。旁注-与按创建日期分组时相同。在SQL命令中使用group时是否在数组中添加了另一层,而我在文档中错过了?

PDO返回查看文件:

$this->stmt->fetchAll(PDO::FETCH_OBJ);

所有这些都传递给

数组
$results

然后将其发送到视图页面上的php,在该页面上,结果数组具有var_dump的此结构。

array() {
  [0]=>
  object(stdClass)# () {
   ["categoryName"]=>
    string() "Help"
  }
  [1]=>
  object(stdClass)# () {
   ["categoryName"]=>
    string() "Me"
  }

以此类推。

注意-也尝试使用-

fetchAll(PDO::FETCH_ASSOC);

但是,ive尝试进行任何排序或将其限制为仅显示一个类别名称,但是正确显示了该类别下的所有条目,而并非每个类别都显示类似的失败。

明天明天完成工作时,我将进行检查,以便在发布后大约20-22个小时内返回。 如果您需要更多信息,请告诉我,我将其发布。

1 个答案:

答案 0 :(得分:1)

您可以按多列排序。使用:

ORDER BY categoryName, postDate DESC

这将使同一类别中的所有帖子保持在一起,并且每个类别中的帖子按降序排列。

有关如何输出结果的信息,请参见How can i list has same id data with while loop in PHP?,其中显示了每个类别的标题。

如果您只想获取每个类别的5个最新帖子,请参见Using LIMIT within GROUP BY to get N results per group?