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

Форум PHP

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

 

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

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

тема: Как лучше решить задачку
 
 автор: designshadow   (21.06.2009 в 17:00)   письмо автору
 
 

Как вывести конкретные записи из БД имея глобальную переменную.

Имеется глобальная переменная $cat.
Ecли $cat=1, то выводи записи с id(10,11,12)

Ecли $cat=2, то выводи записи с id(20,21,22)

Как это лучше реализовать?

  Ответить  
 
 автор: DEM   (21.06.2009 в 17:17)   письмо автору
 
   для: designshadow   (21.06.2009 в 17:00)
 


<?php
$cat
*=10;
$query mysql_query("SELECT * FROM `table` WHERE `id`>'".$cat."'");
while(
$a=mysql_fetch_array($query))
{
  echo 
$a['id'];
}

?>

  Ответить  
 
 автор: designshadow   (21.06.2009 в 17:34)   письмо автору
 
   для: DEM   (21.06.2009 в 17:17)
 

А если нужно вывести где id=118,34,2?

  Ответить  
 
 автор: Diplex   (21.06.2009 в 18:29)   письмо автору
 
   для: designshadow   (21.06.2009 в 17:34)
 

Создаёте массив с нужными числами и пропускаете через цикл.


<?php
$nm 
= array('1','2','3','5','235','4');

for(
$f=0$f<count($nm); $f++)
{

$query mysql_query("SELECT * FROM `table` WHERE `id`='".$nm[$f]."'"); 
while(
$a=mysql_fetch_array($query)) 

  echo 
$a['id']; 
}

}
?>

  Ответить  
 
 автор: designshadow   (21.06.2009 в 18:33)   письмо автору
 
   для: Diplex   (21.06.2009 в 18:29)
 

А куда подставить глобальную переменную $cat?

  Ответить  
 
 автор: Diplex   (21.06.2009 в 18:44)   письмо автору
 
   для: designshadow   (21.06.2009 в 18:33)
 

<?php 

// В зависимости от $cat, выводятся определенные записи
if($cat == '1') { $nm = array('1','2','3','5','235','4'); }
if(
$cat == '2') { $nm = array('7','9','53','74','25','122'); }

for(
$f=0$f<count($nm); $f++) 


$query mysql_query("SELECT * FROM `table` WHERE `id`='".$nm[$f]."'");  
while(
$a=mysql_fetch_array($query))  
{  
  echo 
$a['id'];  



?>

  Ответить  
 
 автор: Valick   (21.06.2009 в 18:48)   письмо автору
 
   для: Diplex   (21.06.2009 в 18:44)
 

Ужас, причём далеко не тихий...

  Ответить  
 
 автор: Diplex   (21.06.2009 в 19:03)   письмо автору
 
   для: Valick   (21.06.2009 в 18:48)
 

у меня всегда так :)

  Ответить  
 
 автор: Valick   (21.06.2009 в 19:05)   письмо автору
 
   для: Diplex   (21.06.2009 в 19:03)
 

это плохо...
учитесь работать с базой данных, и для этого я предлагаю Вам на время забыть всё что вы знаете о РНР

  Ответить  
 
 автор: Diplex   (21.06.2009 в 19:08)   письмо автору
 
   для: Valick   (21.06.2009 в 19:05)
 

Я понимаю, что мой способ грузит базу ровно на столько, сколько элементов в массиве... но для небольших сайтов это допустимо...
А если брать обширно, то Ваша критика правильная. Спасибо за неё, буду учиться ;)

  Ответить  
 
 автор: designshadow   (21.06.2009 в 19:01)   письмо автору
 
   для: Diplex   (21.06.2009 в 18:44)
 

Thanks!

  Ответить  
 
 автор: Valick   (21.06.2009 в 19:03)   письмо автору
 
   для: Diplex   (21.06.2009 в 18:44)
 


<?php 

// В зависимости от $cat, выводятся определенные записи
if($cat == '1')  $nm "10,11,12"
if(
$cat == '2')  $nm "20,21,22"

$query "SELECT * FROM `table` WHERE `id` IN ($nm)"
$res mysql_query($query);
while(
$a=mysql_fetch_array($res)) {  
  echo 
$a['id'];  


?> 

  Ответить  
 
 автор: Diplex   (21.06.2009 в 19:04)   письмо автору
 
   для: Valick   (21.06.2009 в 19:03)
 

Два разных способа.. не вижу ничего совсем убийственного в моём..

  Ответить  
 
 автор: Valick   (21.06.2009 в 19:09)   письмо автору
 
   для: Diplex   (21.06.2009 в 19:04)
 

1) для обхода массива практически всегда используйте foreach, а не for
2) в моём примере 1 запрос к БД, у Вас их столько сколько надо выбрать строк (а если их будет к примеру 500?)

  Ответить  
 
 автор: Diplex   (21.06.2009 в 19:12)   письмо автору
 
   для: Valick   (21.06.2009 в 19:09)
 

1) Хорошо, исправлюсь. Спасибо
2) Свою ошибку уже понял, написал чуть выше :)

  Ответить  
 
 автор: Николай2357   (21.06.2009 в 19:32)   письмо автору
 
   для: Valick   (21.06.2009 в 19:09)
 

1) для обхода массива практически всегда используйте foreach, а не for
А можно узнать, чем foreach предпочтительнее? На сколько я знаю, это довольно тяжелая и медленная конструкция...

для: Diplex
Вот вызывать функцию count() при каждой интерации точно не след... Достаточно до цикла записать результат в переменную и использовать её вместо.

  Ответить  
 
 автор: Diplex   (21.06.2009 в 19:37)   письмо автору
 
   для: Николай2357   (21.06.2009 в 19:32)
 

И с этим согласен :)

Но! Все мои огрехи лишь тормозят работу, но не меняют смысл...

  Ответить  
 
 автор: Valick   (21.06.2009 в 19:45)   письмо автору
 
   для: Николай2357   (21.06.2009 в 19:32)
 

На сколько я знаю, это довольно тяжелая и медленная конструкция...
дайте ссылку для ознакомления пожалуйста

  Ответить  
 
 автор: Valick   (21.06.2009 в 19:59)   письмо автору
 
   для: Николай2357   (21.06.2009 в 19:32)
 

А можно узнать, чем foreach предпочтительнее?
можно
как вы будете обходить массив с ключами 1,2,3,4,6,9?
как вы будете обходить ассоциативный массив?

  Ответить  
 
 автор: Николай2357   (21.06.2009 в 20:06)   письмо автору
 
   для: Valick   (21.06.2009 в 19:59)
 

Нет, я не про это спросил. Если есть возможность использовать for то почему foreach все таки предпочтительнее? Почему его нужно использовать
>практически всегда
?

  Ответить  
 
 автор: Valick   (21.06.2009 в 20:17)   письмо автору
 
   для: Николай2357   (21.06.2009 в 20:06)
 

да по одной простой причине... потому что его специально придумали для этого

  Ответить  
 
 автор: Николай2357   (21.06.2009 в 20:24)   письмо автору
 
   для: Valick   (21.06.2009 в 20:17)
 

Я почему спросил... Читал гдето, непомню где, что foreach довольно громоздкая конструкция и работает с копией массива. И что по возможности нужно стараться её избегать. Если пытаться писать оптимально. Думал что есть более серьёзная причина. Ну так, пусть будет так...

  Ответить  
 
 автор: Diplex   (21.06.2009 в 20:32)   письмо автору
 
   для: Николай2357   (21.06.2009 в 20:24)
 

Кстати, вот: http://all.text.md/2008/04/16/php-test-peratorov-cikla-s-massivom-for-while-ili-foreach/

  Ответить  
 
 автор: Николай2357   (21.06.2009 в 21:24)   письмо автору
 
   для: Diplex   (21.06.2009 в 20:32)
 

Во, вот это уже интереснее. Правда тот тест некорректен, но зато дошли руки убедиться. foreach и for работают почти одинаково, первый даже чуточку быстрее. Вот и верь после этого людям)))

  Ответить  
 
 автор: 345345   (21.06.2009 в 23:23)
 
   для: Николай2357   (21.06.2009 в 21:24)
 

Николай2357, быстрее, но foreach генерирует в памяти еще один экземпляр массива. В обычной ситуации это фигня, но, например, в программировании под мобильники за такое руки отрывают. Там обычного около 10 Mb оперативной памяти, каждый килобайт на счету.

  Ответить  
 
 автор: Skinhead1   (22.06.2009 в 00:33)   письмо автору
 
   для: 345345   (21.06.2009 в 23:23)
 

Что же ты для мобильного такого написал?

  Ответить  
 
 автор: Skinhead1   (21.06.2009 в 21:49)   письмо автору
 
   для: Diplex   (21.06.2009 в 20:32)
 

Добро пожаловать в почетный клуб быдлокодеров. Если не нравится наш клуб быдлокода, можете примкнуть к гавнокодерам, а их гораздо больше чем нас, гораздо... Это конечно шутка, я если бы такую херню написал, а поначалу я такого гавна написал не одну сотню строк, ну а в прочем не важно...

  Ответить  
 
 автор: Diplex   (21.06.2009 в 23:15)   письмо автору
 
   для: Skinhead1   (21.06.2009 в 21:49)
 

Оставьте свои "шутки" при себе. Мне глубо *******, когда меня принижают, но молчать не буду. Я "работаю" на результат - а он был достигнут, и больше меня ничего не волнует. Вся конструктивная критика была выслушана и с благодарностью принята, а все оскорбления прошу оставлять при себе.

  Ответить  
 
 автор: Skinhead1   (22.06.2009 в 00:31)   письмо автору
 
   для: Diplex   (21.06.2009 в 23:15)
 

Это просто была штука, хоть и злая...

  Ответить  
 
 автор: designshadow   (21.06.2009 в 19:18)   письмо автору
 
   для: Valick   (21.06.2009 в 19:03)
 

И тебе спасибо! :-)

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

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