Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизировать запрос / 11 сообщений из 11, страница 1 из 1
26.03.2014, 01:45:09
    #38596483
Pashik1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Добрый день.
Навоял запрос, но долго работает.
К сожалению мои знания оставляют желать лучшего :( поэтому не могу его оптимизировать.
Вообще - получается три запроса друг в друге.
Что-то мне подсказывает, что это не правильно.
Сильно тормозит второй запрос, в котором используется конструкция GROUP BY ..... HAVING
Помогите пожалуйста сделать по-человечески

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
$sql ="SELECT product_id FROM shop_category_products WHERE category_id = '$category_id'";
$result = mysql_query($sql)  or die(mysql_error());
while ($myrow = mysql_fetch_assoc($result)){
	$product_id = $myrow['product_id'];
	
	$sql2 ="SELECT * FROM shop_product_features GROUP BY `feature_value_id` HAVING product_id = '$product_id' AND feature_id = '5'";
	$result2 = mysql_query($sql2)  or die(mysql_error());
	while ($myrow2 = mysql_fetch_assoc($result2)){
		$feature_value_id = $myrow2['feature_value_id'];
		
		$sql3 ="SELECT value, id FROM shop_feature_values_varchar WHERE id = '$feature_value_id'";
		$result3 = mysql_query($sql3)  or die(mysql_error());
		while ($myrow3 = mysql_fetch_assoc($result3)){
			/*$model .= "<option value='".$myrow3['id']."'>".$myrow3['value']."</option>";*/
			$model .= $myrow3['id']."!!!".$myrow3['value']."<br>";
		}
	}
}
...
Рейтинг: 0 / 0
26.03.2014, 02:59:33
    #38596496
despicable me
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Структуру shop_product_features то покажите хотя бы.
...
Рейтинг: 0 / 0
26.03.2014, 06:22:38
    #38596518
Оптимизировать запрос
Pashik1,

заменить вс. гирлянду вложенных запросов на один нормальный запрос с джойнами...
...
Рейтинг: 0 / 0
26.03.2014, 06:24:46
    #38596519
Оптимизировать запрос
Pashik1,

во втором запросе как минимум перенести условие фильтрации данных из HAVING в WHERE. Ибо зачем группировать все данные в таблице, если по итогу интересуют лишь данные с product_id = '$product_id' AND feature_id = '5'...
...
Рейтинг: 0 / 0
26.03.2014, 06:26:40
    #38596520
Оптимизировать запрос
Pashik1,

более того, второй запрос вообще сам по себе абсурден и требует тщательного переписывания... Ибо select * ... group by <некое одно поле> - тот ещё моветон.
...
Рейтинг: 0 / 0
26.03.2014, 10:00:19
    #38596607
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Добрый Э - ЭхPashik1,

более того, второй запрос вообще сам по себе абсурден и требует тщательного переписывания... Ибо select * ... group by <некое одно поле> - тот ещё моветон.мало того, судя по виду запроса having там можно безболезненно заменить на where
...
Рейтинг: 0 / 0
26.03.2014, 10:50:07
    #38596659
Оптимизировать запрос
tanglir,

про замену having на where я упомянул во втором своем ответе в этой ветке ;)
...
Рейтинг: 0 / 0
26.03.2014, 11:05:29
    #38596675
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Добрый Э - Эхпро замену having на whereЭто, кстати, потенциально может изменить результат запроса по уже указанной причине:Добрый Э - Эхselect * ... group by <некое одно поле>
...
Рейтинг: 0 / 0
26.03.2014, 12:24:35
    #38596788
Pashik1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
авторhaving там можно безболезненно заменить на where
изначально так и было, но, к сожалению, он не групировал результат.
все так же выводил повторы

Структуру shop_product_features щас показать не могу, нет доступа.
По памяти: 4 поля int, первое - индэкс. Число записей в таблице около 100тыс.
...
Рейтинг: 0 / 0
26.03.2014, 13:44:38
    #38596902
Оптимизировать запрос
miksoft,

никто не мешает делать нормальную фильтрацию выбираемых данных через WHERE с последующей группировкой отобранных записей, если таковое требуется. Но зачем же группировать ВСЁ, чтобы после выбрать только нужное?
...
Рейтинг: 0 / 0
26.03.2014, 14:08:06
    #38596948
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос
Добрый Э - Эхmiksoft,

никто не мешает делать нормальную фильтрацию выбираемых данных через WHERE с последующей группировкой отобранных записей, если таковое требуется. Но зачем же группировать ВСЁ, чтобы после выбрать только нужное?Я ни в коем случае не агитирую за этот HAVING. Я говорю лишь о том, что результат может измениться.
Правильно, разумеется, все запросы объединить в один и при этом полностью избегать таких неоднозначностей.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Оптимизировать запрос / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]