$psql = $mysql -> Query ("SELECT O.`id`, P.`value` AS `name`, P2.`value` AS `price`, P3.`value` AS `img`, P4.`value` AS `content_s` FROM `".$config -> table['objects']."` AS O JOIN `".$config -> table['property_values']."` AS P ON O.`id`=P.`obj_id` JOIN `".$config -> table['property_list']."` AS L ON P.`list_id`=L.`id` JOIN `".$config -> table['property_values']."` AS P2 ON O.`id`=P2.`obj_id` JOIN `".$config -> table['property_list']."` AS L2 ON P2.`list_id`=L2.`id` JOIN `".$config -> table['property_values']."` AS P3 ON O.`id`=P3.`obj_id` JOIN `".$config -> table['property_list']."` AS L3 ON P3.`list_id`=L3.`id` JOIN `".$config -> table['property_values']."` AS P4 ON O.`id`=P4.`obj_id` JOIN `".$config -> table['property_list']."` AS L4 ON P4.`list_id`=L4.`id` JOIN `".$config -> table['catalog_copula']."` AS CC ON CC.`obj_id`=O.`id` WHERE CC.`car_id`='".$varsGet['car']."' AND L.`system_name`='obj_name' AND L2.`system_name`='obj_price' AND L3.`system_name`='obj_preview' AND L4.`system_name`='obj_content_s' GROUP BY O.`id` ORDER BY P.`value` ASC LIMIT ".$gstart.", ".$gend) or die ($mysql -> Error("",__FILE__,__LINE__,mysql_error()));
из-за этого запроса у моего клиента, отключили базу хостеры!
Спустя 30 минут, 39 секунд (12.12.2006 - 16:03) vasa_c написал(а):
Чего он хотя бы делает. И сам запрос покажи, а не php
Спустя 1 минута, 42 секунды (12.12.2006 - 16:04) zilogo написал(а):
Сколько длится запрос и что эксплайн показывает ?
Спустя 12 минут, 41 секунда (12.12.2006 - 16:17) AlexBB написал(а):
Запрос ниасилил ... слишком много букв. :)
Ошибка в консерватории ...
Ошибка в консерватории ...
Спустя 1 час, 11 минут, 54 секунды (12.12.2006 - 17:29) md5 написал(а):
Короче есть таблица с товарами, $config -> TABLE['objects'].<br>там поля: id, parent_id, module_id<br>Есть таблица(property_list), где хранятся названия атрибутов товара (цена, картинка, описалово) (id, name)<br>Есть отдельно таблица(property_values) где хранятся значения этих атрибутов (id, obj_id, List_id):<br><br>т.е. чтобы нам вытащить цену для объекта с id=9 мы делаем запрос:<br><br>
пожалуйста, не пишите "ниасили" и т.д.
SELECT P.`value` FROM `".$config -> table['property_values']."` AS P JOIN `".$config -> table['property_list']."` AS L ON P.`list_id`=L.`id` WHERE L.`name`='цена нафек' AND P.`obj_id`=9
пожалуйста, не пишите "ниасили" и т.д.
Спустя 10 минут, 45 секунд (12.12.2006 - 17:40) md5 написал(а):
QUOTE
Чего он хотя бы делает.
Вытаскивает товар из objects и его атрибуты: название, цена, описалово и картинку.
QUOTE
Сколько длится запрос и что эксплайн показывает ?
Запрос неизмерим, хостер вырубил базу и сказал оптимизируйте скрипт (mchost.ru), пробовал на мастерхосте, все волшебно быстро загружается...
Спустя 15 минут, 9 секунд (12.12.2006 - 17:55) zilogo написал(а):
QUOTE
все волшебно быстро загружается
Т.е. одно и тоже у разных хостеров работает быстро и медленно ?
Думаю на форуме бесполезно такое спрашивать, ибо нужно смотреть и базы и запросы, где какие индексы и как проходит эксплайн. Можно попробовать использовать myisamchk.
Спустя 3 минуты, 51 секунда (12.12.2006 - 17:59) md5 написал(а):
QUOTE
быстро и медленно
нет, работает и вобще не работает, при этом хостеры страшно пугаются и вырубают базу..
QUOTE
Можно попробовать использовать myisamchk.
спасибо
Спустя 39 минут, 17 секунд (12.12.2006 - 18:38) AlexBB написал(а):
При такой структуре базы, думаю не надо пытаться все обязательно впихнуть в один запрос.
Спустя 22 минуты, 9 секунд (12.12.2006 - 19:00) md5 написал(а):
AlexBB,
а как бы ты это сделал??
а как бы ты это сделал??
Спустя 4 часа, 12 минут, 52 секунды (12.12.2006 - 23:13) Ghost написал(а):
вообще думаю что повис не SQL... может запрос в цикле каком стоял?
и еще такой момент.. неясно, нафиг те ваще делать join по таблице с именами свойств.., ты же не делаешь по ним выборку - сделай отбор по id, дкмаю там однозначное соответствие с "system_name". А если нет, то сделай запросы, отбирающие id, и условия
WHERE P.`list_id`in... AND P2...
и еще такой момент.. неясно, нафиг те ваще делать join по таблице с именами свойств.., ты же не делаешь по ним выборку - сделай отбор по id, дкмаю там однозначное соответствие с "system_name". А если нет, то сделай запросы, отбирающие id, и условия
WHERE P.`list_id`in... AND P2...
Спустя 10 часов, 7 минут, 45 секунд (13.12.2006 - 09:21) md5 написал(а):
QUOTE
может запрос в цикле каком стоял?
цикла нет, я говорю про нагрузку на базу, которую создал этот запрос
join для того чтобы вытащить атрибут товара, по его id..
у меня просто сомнения, нельзя ли заменить JOIN как-то, я ведь к одной и тойже таблице обращаюсь 4 раза, присваивая им разные алиасы..
Спустя 1 час, 8 минут, 22 секунды (13.12.2006 - 10:29) Ghost написал(а):
md5,
дык дело в том, что наименование атрибута ты не используешь, у тебя Join посути исполняет роль WHERE
дык дело в том, что наименование атрибута ты не используешь, у тебя Join посути исполняет роль WHERE
Спустя 3 минуты, 3 секунды (13.12.2006 - 10:32) Ghost написал(а):
опиши класс переменной $config, может и полуится чего оптимизировать
и если не трудно, скинь пример текста запроса, без пхп-переменных, т.е с их значениями..
а то грызут меня смутные сомнения..
и если не трудно, скинь пример текста запроса, без пхп-переменных, т.е с их значениями..
а то грызут меня смутные сомнения..
Спустя 36 минут, 45 секунд (13.12.2006 - 11:09) md5 написал(а):
QUOTE
дык дело в том, что наименование атрибута ты не используешь, у тебя Join посути исполняет роль WHERE
это правильно, тут у меня тоже сомнения :/
QUOTE
опиши класс переменной $config
зачем? в данном случаем используются переменные, в которых хранятся имена таблиц в БД
Спустя 2 часа, 2 минуты, 55 секунд (13.12.2006 - 13:12) AlexBB написал(а):
QUOTE(md5)
AlexBB,
а как бы ты это сделал??
а как бы ты это сделал??
Да я бы просто извлек бы характеристики товара
Select P.Name, V.Value FROM property_list P, property_values V WHERE V.obj_id=9 AND V.List_id=P.id
и прошелся бы потом по ним циклом
И ни в коем случае никаких
L.`name`='цена нафек'
работаем тока с идишниками
Спустя 1 час, 55 минут, 10 секунд (13.12.2006 - 15:07) Ghost написал(а):
если 5-й mysql можно попробовать заюзать хранимые процедуры
есть мнение, что они сильно облегчают жизнь приложениям
есть мнение, что они сильно облегчают жизнь приложениям
Спустя 1 минута, 55 секунд (13.12.2006 - 15:09) md5 написал(а):
AlexBB,
я понимаю, что работаем только с id шниками, я с ними и работаю, только в данном случае id характеристики мы узнаем из её имени (допустим 'obj_price'), но это только название характеристики, чтобы получить её значение для этого объекта мы обращаемся к таблице
property_values AS P
JOIN property_list AS L
ON P.`list_id`=L.`id`
WHERE L.`name`='obj_price' AND P.`obj_id`='my_object_id'
//вытаскием id характеристики (L.`id`) по его имени (т.к. не знаю его id)
//и вытаскиваем P.`value` (значение характеристики) по связке L.`id`=P.`list_id`
дело в том, что мне P.name вобще не нужно, я использую его только лишь для того чтобы узнать id характеристики по этому же самому P.name и сделать связку V.`list_id`=P.`id`
с твоим запросом ща поэкспериментирую..
я понимаю, что работаем только с id шниками, я с ними и работаю, только в данном случае id характеристики мы узнаем из её имени (допустим 'obj_price'), но это только название характеристики, чтобы получить её значение для этого объекта мы обращаемся к таблице
property_values AS P
JOIN property_list AS L
ON P.`list_id`=L.`id`
WHERE L.`name`='obj_price' AND P.`obj_id`='my_object_id'
//вытаскием id характеристики (L.`id`) по его имени (т.к. не знаю его id)
//и вытаскиваем P.`value` (значение характеристики) по связке L.`id`=P.`list_id`
QUOTE
Select P.Name, V.Value FROM property_list P, property_values V WHERE V.obj_id=9 AND V.List_id=P.id
дело в том, что мне P.name вобще не нужно, я использую его только лишь для того чтобы узнать id характеристики по этому же самому P.name и сделать связку V.`list_id`=P.`id`
с твоим запросом ща поэкспериментирую..
Спустя 1 минута, 53 секунды (13.12.2006 - 15:11) AlexBB написал(а):
QUOTE(Ghost)
если 5-й mysql можно попробовать заюзать хранимые процедуры
есть мнение, что они сильно облегчают жизнь приложениям
есть мнение, что они сильно облегчают жизнь приложениям
И чем она в данном случае облегчит жизнь?
Ну будет делать то же самое что я написал не пхп, а хранимая процедура ...
Само по себе это конечно не плохо, но к сути вопроса отношения не имеет.
Спустя 6 минут, 7 секунд (13.12.2006 - 15:17) md5 написал(а):
QUOTE
если 5-й mysql
4
Спустя 10 минут, 44 секунды (13.12.2006 - 15:28) AlexBB написал(а):
QUOTE(md5)
AlexBB,
я понимаю, что работаем только с id шниками, я с ними и работаю, только в данном случае id характеристики мы узнаем из её имени
я понимаю, что работаем только с id шниками, я с ними и работаю, только в данном случае id характеристики мы узнаем из её имени
Думаю стоит пересмотреть архитектуру приложения, чтоб такого не было. Откуда изначально берется имя характеристики?
Спустя 1 минута, 1 секунда (13.12.2006 - 15:29) md5 написал(а):
QUOTE
если 5-й mysql
4
Спустя 2 минуты, 34 секунды (13.12.2006 - 15:31) md5 написал(а):
AlexBB,
Названия характеристик - property_list
структура:
id, name, type
Значения характеристик - property_values
структура:
id, list_id, obj_id, value
Названия характеристик - property_list
структура:
id, name, type
Значения характеристик - property_values
структура:
id, list_id, obj_id, value
Спустя 36 секунд (13.12.2006 - 15:32) Ghost написал(а):
AlexBB,
хранимые процедуры были созданы именно для оптимизации насколько я помню
в любом случае на 4-м их нет
и все-таки хотелось бы увидеть текст вопроса зс значениями $config -> table['property_list']
поясню причину: мне непонятно, у тебя $config -> table['property_list'] юзается 4 раза, в запросе..
это одно и то же значение или разные?
если одно и то же, то столько джоинов не нужно естессна
хранимые процедуры были созданы именно для оптимизации насколько я помню
в любом случае на 4-м их нет
и все-таки хотелось бы увидеть текст вопроса зс значениями $config -> table['property_list']
поясню причину: мне непонятно, у тебя $config -> table['property_list'] юзается 4 раза, в запросе..
это одно и то же значение или разные?
если одно и то же, то столько джоинов не нужно естессна
Спустя 3 минуты, 2 секунды (13.12.2006 - 15:35) AlexBB написал(а):
md5, Да структуру я понял. Проблема-то в чем?
Откуда в скрипте берется имя? Его кто-то вводит или что?
Откуда в скрипте берется имя? Его кто-то вводит или что?
Спустя 4 минуты, 40 секунд (13.12.2006 - 15:40) md5 написал(а):
я говорю скрипту вытащить значение характеристики obj_price
тоесть по-русски - вытащить цену товара
проблем нет, прочитай изначальный вопрос, я спрашиваю, можно ли как-то оптимизировать его?
Как видишь из запроса - JOIN 'нются одни и теже таблицы 4 раза (разные характеристики: цена, фотка, описалово и т.д.)
у меня сомнения по поводу этой структуры запроса, нельзя ли как-нибудь его оптимизировать?
тоесть по-русски - вытащить цену товара
проблем нет, прочитай изначальный вопрос, я спрашиваю, можно ли как-то оптимизировать его?
Как видишь из запроса - JOIN 'нются одни и теже таблицы 4 раза (разные характеристики: цена, фотка, описалово и т.д.)
у меня сомнения по поводу этой структуры запроса, нельзя ли как-нибудь его оптимизировать?
Спустя 1 минута, 30 секунд (13.12.2006 - 15:41) md5 написал(а):
Ghost,
в таком случае, он вытащит все характеристики по этому объекту, а мне нужно только те, которые я перечислил
в таком случае, он вытащит все характеристики по этому объекту, а мне нужно только те, которые я перечислил
Спустя 45 секунд (13.12.2006 - 15:42) md5 написал(а):
QUOTE
AND L.`system_name`='obj_name'
AND L2.`system_name`='obj_price'
AND L3.`system_name`='obj_preview'
AND L4.`system_name`='obj_content_s'
AND L2.`system_name`='obj_price'
AND L3.`system_name`='obj_preview'
AND L4.`system_name`='obj_content_s'
а где таблицы L2, L3, L4???
Спустя 2 минуты, 32 секунды (13.12.2006 - 15:44) Ghost написал(а):
ой, блин, я тормоз, уберу пока никто не увидел..
тогда тока так
я других вариантов не вижу
это позволит от лишних join-ов избавится
тогда тока так
QUOTE
делай отбор по id, дкмаю там однозначное соответствие с "system_name". А если нет, то сделай запросы, отбирающие id, и условия
WHERE P.`list_id`in... AND P2...
WHERE P.`list_id`in... AND P2...
я других вариантов не вижу
это позволит от лишних join-ов избавится
Спустя 9 секунд (13.12.2006 - 15:45) AlexBB написал(а):
Я уже написал, что не надо его оптимизировать. Надо сделать другую логику. И даже написал как.
И я так и не понял, накой нужно поле name, если у характеристики есть id.
И я так и не понял, накой нужно поле name, если у характеристики есть id.
Спустя 10 минут (13.12.2006 - 15:55) md5 написал(а):
AlexBB,
спасибо за предложенный вариант логики,
короче надо вытащить все характеристики (что уберет почти все JOIN), а потом отобрать те, что нужны мне...
просто тут ещё такой момент, если какой-то характеристики не хватает, то её не хочу выводить..
в моем запросе - это сразу отсекается..
ну да ладно, все спасибо
спасибо за предложенный вариант логики,
короче надо вытащить все характеристики (что уберет почти все JOIN), а потом отобрать те, что нужны мне...
просто тут ещё такой момент, если какой-то характеристики не хватает, то её не хочу выводить..
в моем запросе - это сразу отсекается..
ну да ладно, все спасибо
Спустя 40 минут, 54 секунды (13.12.2006 - 16:35) AlexBB написал(а):
QUOTE(md5)
AlexBB,
спасибо за предложенный вариант логики,
короче надо вытащить все характеристики (что уберет почти все JOIN), а потом отобрать те, что нужны мне...
спасибо за предложенный вариант логики,
короче надо вытащить все характеристики (что уберет почти все JOIN), а потом отобрать те, что нужны мне...
Да собственно и в сам запрос можно добавить ограничивающие условия AND P.Name IN (те которые надо)
QUOTE
просто тут ещё такой момент, если какой-то характеристики не хватает, то её не хочу выводить..
в моем запросе - это сразу отсекается..
в моем запросе - это сразу отсекается..
Ну дык и здесь ее не будет. Наоборот, если надо вытаскивать все даже те у которых нет значения, тогда можно переделать мой запрос на LEFT JOIN
Спустя 16 минут, 3 секунды (13.12.2006 - 16:51) md5 написал(а):
QUOTE
её не хочу выводить
её - имеется ввиду товар =)
если какой-нить хар-ки нет - не выводить товар