MySQL Вграден select?

4 отговора 228 прегледа
#1

MySQL Вграден select?

Значи имам си 2 таблички, една users и една stat, и моето id=n;
Та в users имам 2 полета, id и distrib_id. Като за всеки потребител в distrib_id-to пиша id-то на потребителя който му се пада дистрибутор. Нещо като реферали.
В stat, в user_id пища id-to на потребителя който извършва съответното действие което влиза в статистиката. Та в задачата се пита:

Как да извадя от stat всички мой действия (user_id=n ) и всички други user_id-та на който аз съм дистрибутор. /на който в users, в полето distrib_id пише моето id=n)

Благодарско.

Отговор
в отговор на Ивo #2

Re: MySQL Вграден select?

SELECT * from stat where user_id in (SELECT id from users where distrib_id=(SELECT distrib_id from users where id=N));

Де да го знам дали ще заработи тоя двоен вложен селект, нямам MySQL 4+ че да го пробвам :-))))))

Иначе по-лесното е :
1. SELECT distrib_id from users where id=N
2. SELECT s.* from stat s, users u WHERE s.user_id= u.id and u.distrib_id= distirb_id от предната заявка

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #3

Re: MySQL Вграден select?

не MySQL 4+ а MySQL 4.1+ ;-)

а относно въпроса, дали питащия очаква и тези на които неговите дистрибутори са дирстрибутори също да излязат, а и техните дистрибутори и т.н. ;-))

ако махнем рекурсията т.е. не ни интересуват под дистрибуторите и т.н. (не ни интересува дървото от дистрибутори надолу) аз бих написал

SELECT * FROM stat WHERE user_id = MYUSERID
UNION
SELECT s.* FROM stat AS s, users AS u WHERE s.user_id = u.id AND u.distrib_id = MYUSERID;

преименувах N на MYUSERID за да се види, че го има на 2 места ;-))

ако се иска цялото дърво - няма да стане с 1 заявка

Отговор
в отговор на phpGuru #4

Re: MySQL Вграден select?

В отговор на:

SELECT s.* FROM stat AS s, users AS u WHERE s.user_id = u.id AND u.distrib_id = MYUSERID;




Аз до колкото успях да разбера (четох го 10 пъти, явно не съм се събудил)
MYUSERID си има дистрибутор, дето трябва да си го извадим и всички негови клиенти след това,
т.е.
users :
id | distrib_id
1 | 1
2 | 1
3 | 1
4 | 2
5 | 2
6 | 2
7 | 2

stat :
id | ......
1 | .......
2 | .......
3 | .......
4 | .......
5 | .......
6 | .......
7 | .......
8 | .......
9 | .......

ако аз съм усер 1
му трябват всички статистики за усери :1, 2, 3
дето distrib_id ни е еднакъв

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #5

Re: MySQL Вграден select?

да де, то тва тва ще направи

то е същото като твоето второ по-лесно предложение, само дето съм сложил UNION

Отговор