[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить SQL запрос
jalvar
Я делаю запрос
SELECT `id` FROM `users` WHERE `referer`='1'
Я вывожу данные этого пользователя. И мне нужно посчитать сколько у пользователя подрефералов. Узнать их кол-во. Как это сделать одним SQL запросом. Чтобы не сильно грузить сервер.

Что-то вроде..
SELECT `id` FROM `users` WHERE `referer`='1'
(Нашелся человек с `id` = '2')
SELECT `id` FROM `users` WHERE `referer`='2'
(Нашлось под 5 рефералов)
(Нашелся человек с `id` = '3')
SELECT `id` FROM `users` WHERE `referer`='3'
(Нашлось под 3 рефералов)
ит.д.
Но нужно сделать одним запрсом.

_____________
jallvar.oxnull.net - мой блог.
T1grOK
Как это сделать одним SQL запросом. Чтобы не сильно грузить сервер. - в большинстве случаев несколько маленьких запросов будет работать быстрее одного большого.

Здесь целесообразно написать процедуру.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
vagrand
Лучше всего в данном случае создать в таблице users поле numRefers и пересчитывать количество рефералов для каждого пользователя при добавлении или удалении. Пересчет удобнее всего будет организовать в виде триггеров.

_____________
Senior PHP developer: PHP5, MySQL, JavaScript, CakePHP, Yii/Yii2, Zend Framework, Smarty, XML/Xslt, JQuery, Jquery Mobile, Bootstrap, ExtJS, HTML, HTML5, CSS, Linux, SVN, Git, Memcached, Redis, MongoDB, Zend Guard, Ioncube, FFMpeg, PayPal, Webmoney, Qiwi, Facebook API, Vkontakte Api, Google API, Twitter Api, Steam Api.
Junior Android Developer: Android SDK, многопоточность, работа с HTTP запросами, JSON, SQLite, фрагменты.
ruzarh
SELECT CONCAT(`id`) FROM `users` WHERE `referer`='1'


Попробуй так тебе будут приходить строкой все ID через запятую

_____________
Не портите мои нервные клетки, так как в них живут нервные тигры!
Placido
В MySQL одним запросом не получится, так как MySQL не поддерживает рекурсивные запросы. В Postgres - да, где-то есть тема, в которой sergeiss показывал, как выбрать дерево одним запросом.

А для MySQL - или процедура, как подсказывал T1grOK, или вариант vagrand, или средствами PHP.

Цитата (ruzarh @ 22.04.2012 - 19:53)
<pre class="sh_sourceCode" rel="sql"><span class="sh_keyword">SELECT</span> <span class="sh_function">CONCAT(</span><span class="sh_att">`id`</span><span class="sh_symbol">)</span> <span class="sh_keyword">FROM</span> <span class="sh_att">`users`</span> <span class="sh_keyword">WHERE</span> <span class="sh_att">`referer`</span><span class="sh_symbol">=</span><span class="sh_string">'1'</span></pre>
Попробуй так тебе будут приходить  строкой все ID через запятую


Причем тут CONCAT? Если речь о GROUP_CONCAT, то это в данном случае проблемы не решит - здесь древовидная структура, которая хранится по принципу смежных вершин, поэтому здесь нужна рекурсивная выборка.
I++
Цитата (jalvar @ 21.04.2012 - 14:27)
Я делаю запрос
SELECT `id` FROM `users` WHERE `referer`='1'
Я вывожу данные этого пользователя. И мне нужно посчитать сколько у пользователя подрефералов. Узнать их кол-во. Как это сделать одним SQL запросом. Чтобы не сильно грузить сервер.

Что-то вроде..
SELECT `id` FROM `users` WHERE `referer`='1'
(Нашелся человек с `id` = '2')
SELECT `id` FROM `users` WHERE `referer`='2'
(Нашлось под 5 рефералов)
(Нашелся человек с `id` = '3')
SELECT `id` FROM `users` WHERE `referer`='3'
(Нашлось под 3 рефералов)
ит.д.
Но нужно сделать одним запрсом.

SELECT `id` FROM `users` WHERE `referer` IN (1,2,3)

be happy laugh.gif
sergeiss
Цитата (Placido @ 22.04.2012 - 23:40)
В Postgres - да, где-то есть тема, в которой sergeiss показывал, как выбрать дерево одним запросом.

Вот тут: http://phpforum.ru/index.php?showtopic=31806&hl= было

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Guest
[flipv][/fliph][fliph][/fliph][fliph][fliph][/fliph] user posted image ph34r.gif blink.gif wacko.gif unsure.gif sad.gif cool.gif biggrin.gif

vfdgf

vfdgf

vfdgf

vfdgf
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.