SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.05.2013 17:23:08

vangogh
Участник
Зарегистрирован: 27.05.2013
Сообщений: 4

MySQLi получение данных из процедуры с двумя селектами

Добрый день!
Перешел работать с Mysql на "i" и объектную модель.
вроде делаю, работает. но не знаю правильно ли я делаю. вот тут то мне нужен ваш совет, ото вдруг я пару 10ком запросов сервак БД положу))

у меня все в процедурах делаю так:
процедура:

BEGIN
SELECT * FROM user_general WHERE user_general.id = varid  LIMIT 1;
SELECT * FROM user_lang WHERE id_user = varid; -- список
END;$$

....
if ( !($e = $db->query( "call user_get_allcontact('".$_SESSION['user_id']."')" )) ) echo 'SQl error user_get_allcontact';
$row = $e->fetch_assoc(); - тут я так понимаю попадают данные первого селекта

потом что бы получить список языков которыми владеет пользователь (может и 0 строк быть) делаю так:

$db->next_result();
$e = $db->store_result(); // либо $db->store_result();
$listlang = $e->fetch_all(MYSQLI_ASSOC); //получили список языков разом. php 5.3 вродь

как нормально, или можно лучше? ото напрягает делать $db->next_result();  $db->store_result(); после каждого вызова,  когда на странице используется вызов двух процедур или как в примере

Неактивен

 

#2 27.05.2013 22:53:04

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: MySQLi получение данных из процедуры с двумя селектами

ото вдруг я пару 10ком запросов сервак БД

Не положите

вродь как нормально, или можно лучше?

Можно отдельными запросами, в вашем случае обьвертывания запросов в процедуре, производительности практически не прибавит.

Неактивен

 

#3 31.05.2013 11:04:28

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: MySQLi получение данных из процедуры с двумя селектами

Соглашусь, используйте обычные SQL запросы из приложения без использования процедуры, если в ней только эти два запроса и больше никаких проверок/вычислений. Как вообще пришла такая мысль в голову? smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#4 31.05.2013 16:16:10

vangogh
Участник
Зарегистрирован: 27.05.2013
Сообщений: 4

Re: MySQLi получение данных из процедуры с двумя селектами

в общем до этого писал в только в процедурном стиле и mysql.
решил перейти на новый уровень ооп mysqli, ..пишут что процедуры безопасней и быстрее)) к  тому же пока разобрался(но все равно еще кучу непонятков как лучше и как оно там работает), терь буду знать как юзать это по надобности) хочется в sql разобратся что бы высокие нагрузки выдерживало, пока на mySQL потренируюсь потом на оракл или ms sql server там уж видно будет)

юзать процедуры хорошо, что бы легко можно было оптимизировать запросы а в php не лезть, тож хорошо))

Неактивен

 

#5 31.05.2013 18:37:14

Neval
Гуру
Откуда: Киев
Зарегистрирован: 11.03.2008
Сообщений: 449

Re: MySQLi получение данных из процедуры с двумя селектами

Скажем так, Вы пытаетесь доехать на работу не на машине, а на самолёте, но т.к. ехать всего 100 метров, машина разгонится и соответственно доедет быстрее smile

В случаях, когда в процедуре только выборки, которые в любом случае надо обработать, выгоды нет совсем. Процедура как минимум считывается и парсится, а это какое-то время. Понятное дело, что мизерное, но всё же дольше, чем передать запрос напрямую. Более того, такой подход усложняет понимание кода и отлавливание ошибок: если Вы получили неверные значения в выборке, Вам придётся изменять запрос, а для этого Вам надо будет лезть в БД и редактировать процедуру, что не совсем удобно. И это не говоря о том, что кому-то понадобится дорабатывать Ваши скрипты.

Дело Ваше, конечно же, кто как привык, но именно такая привычка ни к чему хорошему не приведёт, так-что бросайте её пока не врослась smile


Человек без чувства юмора - не серьёзный человек wink

Неактивен

 

#6 31.05.2013 23:55:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5833

Re: MySQLi получение данных из процедуры с двумя селектами

vangogh написал:

решил перейти на новый уровень ооп mysqli, ..пишут что процедуры безопасней и быстрее))

Рекомендую посмотреть статью PHP: критика перехода с оригинального API MySQL на mysqli и PDO

Неактивен

 

#7 01.06.2013 01:32:38

vangogh
Участник
Зарегистрирован: 27.05.2013
Сообщений: 4

Re: MySQLi получение данных из процедуры с двумя селектами

спасибо, седня на обеде почитаю

Неактивен

 

#8 02.06.2013 23:29:23

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: MySQLi получение данных из процедуры с двумя селектами

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

Неактивен

 

#9 04.06.2013 08:08:59

vangogh
Участник
Зарегистрирован: 27.05.2013
Сообщений: 4

Re: MySQLi получение данных из процедуры с двумя селектами

и сгенирированых в процессе запросов выполнить не получится(( например при большой форме поиска

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson