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

Форум MySQL

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: PHP, SQL, вывод многотабличного запроса

Сообщения:  [1-5] 

 
 автор: iv4art   (18.05.2011 в 09:46)   письмо автору
 
   для: cheops   (18.05.2011 в 01:03)
 

Спасибо огромное, очень помогли.

  Ответить  
 
 автор: cheops   (18.05.2011 в 01:03)   письмо автору
 
   для: iv4art   (17.05.2011 в 23:10)
 

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

  Ответить  
 
 автор: iv4art   (17.05.2011 в 23:10)   письмо автору
 
   для: cheops   (17.05.2011 в 21:07)
 

Хм. Сам не догадался, спасибо.

А на счёт второго: сильно ли понижается производительность при большом количестве запросов к базе? Т. е. какое нормальное количество запросов для одного скрипта: 5, 10, 100? Ведь если запросы занимают много ресурсов, то при высокой активности пользователей на сайте серверу будет всё сложнее справляться. Или запросы к базе настолько нересурсоёмкие, что можно и не стараться на них экономить? Просто когда читал описание к DataLifeEngine, там акценитровалось внимание на том, что каждый скрипт CMS делает не более 5 запросов к базе. У меня с тех пор пунктик по этому поводу.

  Ответить  
 
 автор: cheops   (17.05.2011 в 21:07)   письмо автору
 
   для: iv4art   (17.05.2011 в 20:30)
 

>Каким образом сформировать каталог при помощи такого запроса?
А что вызывает сложности? То что записи относительно каталога повторяются? Если да, то нужно просто завести переменную и в которую сохранять название или идентификатор каталога, как только в очередной записи будет отличный идентификатор или название - происходит смена каталога: нужно вывести название и обновить содержимое промежуточной переменной.

>На мой взгляд это не круто
Круто или нет покажет время - многотабличные запросы - это декартово произведение таблиц, т.е. вместо двух таблиц grup1 и grup2 у вас появляется одна таблица с количеством записей равных произведению количества строк в этих таблицах. Эта большая таблица, если не убирается в оперативной памяти, как вы догадываетесь сначала записывается на жесткий диск, а потом из неё отбираются нужные по WHERE-условию записи. Поэтому с форумом такая политика не пройдет: все что можно - вычислить заранее, где можно, используем хорошо-кэшируемые однотабличные запросы.

  Ответить  
 
 автор: iv4art   (17.05.2011 в 20:30)   письмо автору
 
 

Дано: три таблицы, в которых содержится каталог магазина:
GRUP1 — типы товаров, поля ID и NAME;
GRUP2 — категории товаров, привязаны к типу ID, NAME, ID_GRUP1;
TOVAR — собственно товары, привязаны к категориям ID, NAME, ID_GRUP2.
В настоящее время каталог формируется по следующему принципу:

$query_types = mysql_query("SELECT * FROM GRUP1");
if($query_types){
while($types = mysql_fetch_array($query_types)){
echo("<h1>".$types["NAME"]."</h1>");
$query_categories = mysql_query("SELECT * FROM GRUP2 WHERE ID_GRUP1=".$types["ID"]);
if($query_categories){
while($categories = mysql_fetch_array($query_categories)){
echo("<а хреф='items.пхп?category=".$categories["ID"].">".$categories["NAME"]."</а><br>");
}
} else {
echo(mysql_error());
}
}
} else {
echo(mysql_error());
}

По переходу по ссылкам скрипт итемс.пхп формируем список товаров из таблицы TOVAR, где ID_GRUP2=$_GET["category"].
Такой же принцип использовался при разработке этого форума, насколько я могу судить по книге «PHP5. Создание web-сайтов». На мой взгляд это не круто, потому что чем больше у типов товаров (записей в таблице GRUP1), тем больше запросов при формировании каталога. Я пытаюсь сформировать каталог с помощью одного многотабличного запроса:

SELECT GRUP1.ID AS grup1id, GRUP1.NAME AS grup2name, GRUP2.ID AS grup2id, GRUP2.NAME AS grup2name FROM grup1,grup2 WHERE grup2.ID_GRUP1=grup1.ID

Каким образом сформировать каталог при помощи такого запроса?

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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