嘿,我有一个名为“projects”的数据库表,其中包含字段'id','locationid','name'和'year'。我查询数据库以检索所有值并将它们存储在$ data中,然后将它们传递到相关视图中。
在网站的哪个部分,我创建了一个时间轴(由foreach生成的列表项)。在这个时间表中,我将项目与相应的“年份”值相关联。所以在1999年,我会找到1999年的所有项目。
现在我有一个丑陋的黑客攻击解决方案,在我用来生成时间线的foreach内部我有另一个foreach,它通过项目表并检查'year'字段是否与当前时间轴年匹配,如果所以加上它。
基于查找特定字符串,是否有更优雅的方法来查询传入视图的$数据(以及数据库字段值)?
基本上,如果我能写出来我想表达它,我正在寻找这样的东西:
<?php foreach $year_range as $timeline_year : ?>
<div class="projects_menu">
<?php foreach $projects WHERE $projects->$year EQUAL $timeline_year : ?>
<?php echo $projects->$name ?>
<?php endforeach ?>
</div>
<?php endforeach ?>
答案 0 :(得分:0)
完整的动态解决方案是:
第一个SQL查询
SELECT `year`
FROM `projects`
GROUP BY `year`
ORDER BY `year` ASC
然后循环
while($row = mysql_fetch_array($r)) {
echo '<div class="projects_menu">';
echo $row['year'].' Projects';
$q2="SELECT * FROM `projects` WHERE `year`='{$year}' ORDER BY `name`";
//db connection $r2
while($row2 = mysql_fetch_array($r2)) {
echo $row2['name'];
}
echo '</div>';
}
因此,无论你需要多少年,这都无关紧要。
我很确定这就是你追求的目标
答案 1 :(得分:0)
我可能误解了这个问题,但看起来你可以做类似的事情:
SELECT * FROM projects WHERE ($condition) ORDER BY YEAR ASC, name ASC
然后只需在PHP中输出结果:
foreach ($projects as $project) {
/* output $project */
}
或
foreach ($year_range as $year) {
/* output timeline, inserting projects if any occur in that year */
}
$condition
可能类似于:
projects.year >= $start_year AND projects.year <= $end_year
或
projects.year IN ($year_range)
或
projects.year IN ($year_range) and project.name LIKE '%$search_string%'
你必须更具体地“找到特定的字符串”,因为我不确定在这个问题中会发挥什么作用。
答案 2 :(得分:0)
您是否研究过CodeIgniter的Active Record语法?也许是这样的:
$this->db->select("*")->from("projects")->where("year <=", $date);
$query = $this-<db->get();
那应该返回小于或等于$ data参数的所有记录。