2010-06-20 2 views
0

Эй, у меня есть таблица базы данных, называемая «проекты» с полями «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 ?> 
+0

Почему вы пишете новый набор тегов php для каждой строки кода? – 2010-06-20 23:22:28

+0

@MrXexxed Это стандартная практика во многих файлах * view * (V in MVC). – alex

+0

CodeIgniter не нравится, когда вы этого не делаете. Или это то, чему меня учили. – Walker

ответ

0

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

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

Полное динамическое решение было бы:

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

Таким образом, не важно, сколько лет вы должны получить.

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

0

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

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

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

Смежные вопросы