powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать процедуру
8 сообщений из 8, страница 1 из 1
Помогите написать процедуру
    #38862224
furashcka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Всю ночь я читаю о процедурах о переменных, да беда англиского не знаю...
На русских сайтах о своей проблеме ничего не нашел...

Вот составил это чудовище в phpMyAdmin, если выполнить этот запрос с под phpMyAdmin все отрабатывает ок!
Но если я его прописываю в php и выполняю запрос с под mysql_query(); мне возвращает NULL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SET @idF:= NULL;
		
SELECT @idF:=CONCAT_WS(',', @idF, id_user_frend)  FROM ps_user_frends WHERE id_user_uf=4 OR id_user_frend=4 AND agreement=1;
		
SET @setIN=CONCAT('SELECT u.login, uAvat.url_avatar, uAvat.avatar_bg, uStat.star, uStat.like, uStat.tariff, uStat.tariff_tape, uStat.view  FROM ps_users u LEFT JOIN ps_users_avatar  uAvat ON uAvat.id_user=u.id_user LEFT JOIN ps_user_stats uStat ON uStat.id_user=u.id_user  WHERE u.id_user IN(', @idF, ') LIMIT 50');
		
PREPARE getF FROM @setIN;
EXECUTE getF;



Думал что процедура поможет, создал процедуру... нажимаю выполнить в phpMyAdmin все сразу же зависает, если с под php то мне возвращается ерунда, название переменных и id в моем случае 4

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DELIMITER |

CREATE PROCEDURE getFrends()
BEGIN
SET @idF:= NULL;
		
SELECT @idF:=CONCAT_WS(',', @idF, id_user_frend)  FROM ps_user_frends WHERE id_user_uf=4 OR id_user_frend=4 AND agreement=1;
		
SET @setIN=CONCAT('SELECT u.login, uAvat.url_avatar, uAvat.avatar_bg, uStat.star, uStat.like, uStat.tariff, uStat.tariff_tape, uStat.view  FROM ps_users u LEFT JOIN ps_users_avatar  uAvat ON uAvat.id_user=u.id_user LEFT JOIN ps_user_stats uStat ON uStat.id_user=u.id_user  WHERE u.id_user IN(',@idF,') LIMIT 50');
		
PREPARE getF FROM @setIN;
EXECUTE getF;
END;
|

DELIMITER ;



мудрил... да ниче и не придумал(( наверняка тут есть умнее меня! помогите а?)
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38862534
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
furashcka,
скачай dbforge for mysql там можно отлаживать хранимки , а уж потом запускать их из всяких извращений типа phpadmin
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38862601
furashcka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

О, незнал! спасиб)
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38862838
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
furashcka
Код: sql
1.
2.
3.
SELECT @idF:=CONCAT_WS(',', @idF, id_user_frend)  FROM ps_user_frends WHERE id_user_uf=4 OR id_user_frend=4 AND agreement=1;
		
SET @setIN=CONCAT('SELECT u.login, uAvat.url_avatar, uAvat.avatar_bg, uStat.star, uStat.like, uStat.tariff, uStat.tariff_tape, uStat.view  FROM ps_users u LEFT JOIN ps_users_avatar  uAvat ON uAvat.id_user=u.id_user LEFT JOIN ps_user_stats uStat ON uStat.id_user=u.id_user  WHERE u.id_user IN(', @idF, ') LIMIT 50');

медвежуть какая...


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT u.login
, uAvat.url_avatar, uAvat.avatar_bg
, uStat.star, uStat.like, uStat.tariff, uStat.tariff_tape, uStat.view  
FROM ps_users u 
JOIN (SELECT /*distinct*/ id_user_frend AS id
 FROM ps_user_frends WHERE id_user_uf=4 OR id_user_frend=4 AND agreement=1 
) t0 on u.id_user=t0.id
LEFT JOIN ps_users_avatar  uAvat ON uAvat.id_user=u.id_user 
LEFT JOIN ps_user_stats uStat ON uStat.id_user=u.id_user  
LIMIT 50 -- где ордербай, или вам пофиг, какие записи возвратятся?

Но фильтр у вас какой-то странный. Вы уверены, что там всё правильно?
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38863227
furashcka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,

оо спасибо вам, оказывается и без процедуры обойтись можно)))

нет, я не уверен... ))

ORDER BY? Сортировка?)))
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38863230
furashcka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,
а distinct (только уникальные значения) его так принято писать когда выбираешь только уникальные значения? просто сам скрипт не вставит две записи с одинаковым id_user...
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38863790
furashcka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglir,
спасибо вам огромное вы мне очень помогли!!!!

мне в другой темен написали что join нужен только в двух случаях:

а) у вас поиск отсутствия записи - тогда в условиях проверок где-то будет присутствовать IS NULL... его нет.

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

это увеличит скорость при больших нагрузках?))
а то я при выборке 5 записей разницы не увидил

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT u.login
, uAvat.url_avatar, uAvat.avatar_bg
, uStat.star, uStat.like, uStat.tariff, uStat.tariff_tape, uStat.view  
FROM ps_users u 
JOIN (SELECT IF(id_user_frend=4,id_user_uf,id_user_frend) AS id
 FROM ps_user_frends WHERE id_user_uf=4 OR id_user_frend=4 AND agreement=1 
) t0 on u.id_user=t0.id, ps_users_avatar  uAvat, ps_user_stats uStat
WHERE uAvat.id_user=u.id_user AND uStat.id_user=u.id_user
LIMIT 50
...
Рейтинг: 0 / 0
Помогите написать процедуру
    #38863850
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
furashckaэто увеличит скорость при больших нагрузках?))эээ... ЧТО увеличит? замена in на join? Ну если у вас версия ниже 5.5, то наверняка увеличит.
Или вы о замене левого джойна на обычный? Ну тоже должно получше стать, хуже точно не будет. Только не стоит мешать синтаксис джойнов ("join" / запятые+where).

furashcka
Код: sql
1.
WHERE (id_user_uf=4 OR id_user_frend=4) AND agreement=1 

Мой ХШ говорит, что вам надо прокачать либо внимательность, либо навыки составления предикатов.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите написать процедуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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