我有一个名为“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/