Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сократить кол-во селектов
 
 автор: gofree   (11.09.2011 в 21:00)   письмо автору
 
 

Допустим есть довольно таки простой вывод из базы.

 <?
$query
"SELECT id, id_category, category FROM `second_category` ORDER by category ASC";
?>


Объясните пожалуйста как можно избежать нагромождения селектов, что бы вывести результаты каждой категории в цикле, в разных местах.

Мне в голову приходит только

 <?
$query1 
"SELECT id, id_category, category FROM `second_category` WHERE id_category = '1' ORDER by category ASC";
$query2 "SELECT id, id_category, category FROM `second_category` WHERE id_category = '2'  ORDER by category ASC";
$query3 "SELECT id, id_category, category FROM `second_category` WHERE id_category = '3'  ORDER by category ASC";
?>


Но это абсурд... :)

  Ответить  
 
 автор: gOFREe   (11.09.2011 в 23:56)   письмо автору
 
   для: gofree   (11.09.2011 в 21:00)
 

Можно сделать так


<?
$query 
"SELECT id, id_category, category FROM `second_category` ORDER by category ASC"
$result mysql_query($query); 
while(
$t mysql_fetch_assoc($result)){ 
if(
$t['id_category'] == 1) {

}
if(
$t['id_category'] == 2) {

}
if(
$t['id_category'] == 3) {

}
}
?>


Хотелось бы, что бы подсказали с решением ДО цикла.

  Ответить  
 
 автор: cheops   (12.09.2011 в 14:19)   письмо автору
 
   для: gOFREe   (11.09.2011 в 23:56)
 

Лучше всего поместить данные, получаемые из результирующей таблицы в какой-то промежуточный массив (а лучше сразу в несколько, по количеству формируемых блоков), а потом уже выводить его там где вам нужно, не дергая базу данных.

  Ответить  
 
 автор: gOFREe   (12.09.2011 в 14:27)   письмо автору
 
   для: cheops   (12.09.2011 в 14:19)
 

Так пойдет?

<? 
$query 
"SELECT id, id_category, category FROM `second_category` ORDER by category ASC";  
$result mysql_query($query);  
while(
$t mysql_fetch_assoc($result)){  
if(
$t['id_category'] == 1) { 
$category1 implode(','$t['id_category']);

if(
$t['id_category'] == 2) { 
$category2 implode(','$t['id_category']);

if(
$t['id_category'] == 3) { 
$category3 implode(','$t['id_category']);


?>

  Ответить  
 
 автор: cheops   (12.09.2011 в 14:46)   письмо автору
 
   для: gOFREe   (12.09.2011 в 14:27)
 

Хм... думаю это не совсем то, что вам нужно, лучше поступить как-то так
<?php
  $query 
"SELECT id, id_category, category 
            FROM `second_category`
            ORDER by category ASC"
;   
  
$result mysql_query($query);   
  if(!
$result) exit("Ошибка выполнения запроса");
  
$category = array();
  while(
$t mysql_fetch_assoc($result)){   
    
$category[$t['id_category']][$t['id']] = $t;
  }  
?>
Тогда у вас получится двумерный массив $category, захотите вывести первую категорию, обращайтесь к $category[1], захотите третью - $category[3].
<?php
  
foreach($category[3] as $id => $value)
  {
    echo 
$value['category']."<br>";
  }

  Ответить  
 
 автор: gOFREe   (12.09.2011 в 15:15)   письмо автору
 
   для: cheops   (12.09.2011 в 14:46)
 

Понял, спасибо! Соображалка плохо работает у меня )

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования