php - 获取多行的年份部分

标签 php mysql sql

我有一个名为“picturevents”的 SQL 表。其中存储了图片存在的所有事件。

我现在想在我的页面上实现一个下拉菜单,用户可以在其中选择他想要显示图片的年份。 为此,我需要从数据库中接收所有年份。

现在我的 php 脚本中有以下函数(运行得很好):

function getPictureYears(){

    $ret = mysqli_query($this->link, "SELECT `id` FROM `pictureevents` WHERE 1");
    $array = null;
    while($row = mysqli_fetch_array($ret, MYSQL_ASSOC)){
        $array[] = $row;
    }

    for($i=0; $i < sizeof($array); ++$i){
        $id = $array[$i]['id'];
        $array[$i]["year"] = mysqli_fetch_row(mysqli_query($this->link, "SELECT EXTRACT(YEAR FROM ( SELECT `date` FROM `pictureevents` WHERE `id` = $id))"))[0];
    }
    return $array;  
}

如果我能简化它,我会很高兴。 我发现了以下功能:

SELECT EXTRACT(YEAR FROM (SELECT `date` FROM `pictureevents` WHERE 1))

只要子查询只返回一行,这种方法就很有效,当表中有多于一行时,SQL 会报告:

     1242 - Subquery returns more than 1 row 

如何解决该错误,但仍然“在 SQL 中”执行所有操作?这可能吗?

顺便说一句:我总是尝试在 SQL 中做尽可能多的事情的原因是:他们的代码比我写的要复杂得多,并且它大大简化了我的代码。

最佳答案

SELECT distinct year(`date`) FROM `pictureevents`

返回 pictureevents 中存在条目的所有年份(每年一次)。

关于php - 获取多行的年份部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413195/

相关文章:

php - laravel 5 中的日期格式

php - 如何在 codeigniter 中上传 2 个单独的图像

mysql - 仅当列的所有元素都在另一个表中时才匹配

mysql - 如何避免在下面的 mysql 查询中出现重复行的情况?

mysql - 使用多个 where 子句插入语句

php - Magento - 第 816 行的 fatal error : Call to a member function getBackend() on a non-object in app/code/core/Mage/Eav/Model/Entity/Abstract. php

php - 人气算法

Sql Server - 外部应用与子查询

SQL门访问

java - JDBC ResultSet : I need a getDateTime, 但只有 getDate 和 getTimeStamp