Как вернуть все строки базы данных с определенным значением поля - PullRequest
0 голосов
/ 21 июня 2010

Эй, у меня есть таблица базы данных под названием «проекты» с полями «id», «locationid», «name» и «year». Я запрашиваю базу данных, чтобы получить все значения и сохранить их в $ data, прежде чем передать их в соответствующее представление.

В какой части веб-сайта я создал временную шкалу (состоящую из элементов списка, созданных с помощью foreach). В этот график я должен был связать проекты с соответствующими значениями «год». Так что под 1999 год я бы нашел все проекты на 1999 год.

Прямо сейчас у меня есть уродливое взломанное решение, в котором внутри foreach я использую для создания временной шкалы ДРУГОЙ foreach, которая просматривает таблицу проектов и проверяет, совпадает ли поле year с текущим годом timeline, и так добавляет это.

Есть ли более элегантный способ запроса $ 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 ?>

Ответы [ 3 ]

0 голосов
/ 21 июня 2010

Возможно, я неправильно понимаю вопрос, но кажется, что вы могли бы сделать что-то вроде:

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%'

Вы должны быть более конкретны в отношении "поиска конкретных строк", так как я не уверен, где это может сыграть в этой проблеме.

0 голосов
/ 21 июня 2010

Вы изучили синтаксис CodeIgniter Active Record ?Может быть что-то вроде:

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

Это должно вернуть все записи, которые меньше или равны аргументу $ data.

0 голосов
/ 21 июня 2010

Полное динамическое решение будет следующим:

первый запрос 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>';
}

Так что это не имеет значениясколько лет вам нужно получить.

Я уверен, что это то, что вы были после

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...