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

Posted

技术标签:

【中文标题】如何返回具有特定字段值的所有数据库行【英文标题】:How to return all database rows with certain field value 【发布时间】:2010-06-20 23:19:31 【问题描述】:

嘿,我有一个名为“projects”的数据库表,其中包含“id”、“locationid”、“name”和“year”字段。在将它们传递到相关视图之前,我查询数据库以检索所有值并将它们存储在 $data 中。

在网站的哪个部分,我创建了一个时间线(由使用 foreach 生成的列表项组成)。在这个时间线上,我要将项目与其相应的“年份”值相关联。所以在 1999 年以下,我会找到 1999 年的所有项目。

现在我有一个丑陋的黑客解决方案,在我用来生成时间线的 foreach 内部我有另一个 foreach,它通过项目表并检查“年份”字段是否与当前时间线年份匹配,如果所以添加它。

有没有更优雅的方法来根据查找特定字符串来查询我传递到视图中的 $data(以及数据库字段值)?

基本上,如果我能写出我想表达的方式,我正在寻找这样的东西:

<?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 ?>

【问题讨论】:

为什么要为每一行代码写一套新的php标签? @MrXexxed 这似乎是很多 view(MVC 中的 V)文件的标准做法。 CodeIgniter 不喜欢你不喜欢它。或者这就是我被教导的。 CodeIgniter 不应该关心(除非它自己解析你的 PHP 和检查,我非常怀疑)。在我看来它仍然看起来更干净,速度差异通常可以忽略不计。 选择语句的短标签通常在输出 html 时使用。如果您只生产 PHP,那么它们并不是真正需要的。这仍然只是偏好。 【参考方案1】:

我可能误解了这个问题,但您似乎可以这样做:

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】:

一个完整的动态解决方案是:

第一个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>';

这样一来,你必须获得多少年都没关系。

我很确定这就是你所追求的

【讨论】:

【参考方案3】:

您是否研究过 CodeIgniter 的 Active Record 语法?可能是这样的:

$this->db->select("*")->from("projects")->where("year <=", $date);
$query = $this-<db->get();

这应该返回所有小于或等于 $data 参数的记录。

【讨论】:

以上是关于如何返回具有特定字段值的所有数据库行的主要内容,如果未能解决你的问题,请参考以下文章

在执行 Select 查询时,如何忽略 Postgresql 中某列具有特定值的数据行?

删除特定行中具有特定值的所有列

从熊猫数据框中提取在特定列中具有特定值的所有行

如何求和具有特定查找字段值的记录数

如何在 MySQL 中选择字段具有最小值的数据?

MYSQL如何选择字段具有最小值的数据