如何返回具有特定字段值的所有数据库行

时间:2010-06-20 23:19:31

标签: php sql codeigniter

嘿,我有一个名为“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 ?>

3 个答案:

答案 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参数的所有记录。