![]() |
|
Модераторы: skyboy |
![]()
|
|
| Staser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 15.7.2006 Репутация: нет Всего: нет |
Как сделать нормальный (правильно работающий) запрос типа SELECT COUNT(*)...;
Из такого вот запроса:
Проблемы которые следует решить:
Это сообщение отредактировал(а) Staser - 28.10.2006, 18:41 |
|||
|
||||
| comtat |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1310 Регистрация: 2.5.2006 Где: Россия, Казань Репутация: 1 Всего: 71 |
Какие ошибки заметил сразу
перед FROM запятой не нужно ставить За чем нужна такая конструкция
Я не понимаю, наверное имелось в виду, если ID число, то тогда
Это сообщение отредактировал(а) comtat - 28.10.2006, 10:35 -------------------- Рожденный в СССР !!! ExtJS - мой фреймворк |
||||||
|
|||||||
| Staser |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 15.7.2006 Репутация: нет Всего: нет |
Первая ошибка, это я не заметил когда вырезал _лишнее_ из запроса, важна сама суть...
%ID% - это некая переменная в скрипте, который делает запрос... И всёже, так никто и не помог, вопрос тот же... |
|||
|
||||
| muzer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 31.8.2006 Репутация: 30 Всего: 31 |
Staser, вы издеваетесь?
Подскажу, как правильно задать вопрос: привести show create table, описать какое поле что значит, сформулировать словами, какого результата пытаетесь добиться, тогда вам помогут. А то представьте, я щас приведу какой-нить запрос (типа того, что ниже) и скажу "помогите, не работает"
|
|||
|
||||
| Staser |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 15.7.2006 Репутация: нет Всего: нет |
Ну вот таблица, (значительно упрощённая)
Представляет собой таблицу зависимостей, где `uid` владелец где `fid` тот кто напрямую относится к владельцу если `uid`=1, и у него есть прямое отношение к пользователю, скажем, 3 (`fid`=3) то у пользователя 3 должна быть соответствующая запись, только наоборот, `uid`=3, `fid`=1 А запрос, приведённый выше (1ый пост), находит и выводит с помощью рекурсии все связи 4го уровня Вот графическая запись того что делается.. 1. 2. ![]() 1. Всё работает правильно 2. Выбор записей, SELECT `uid`, `fid`... работает правильно, с группировкой: uid fid 4 3 5 7 5 8 Выбор кол-ва записей выводит несколько результатов работы COUNT, в то время когда нужен 1 COUNT( * ) 1 2 Проблемы:
Вот структура базы для приведённых примеров: 1.
2.
Уфф, надеюсь понятно обьяснил... |
||||||
|
|||||||
| muzer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 31.8.2006 Репутация: 30 Всего: 31 |
Вот, уже лучше. Вы только не написали, какой должен быть результат у запроса для тех данных, которые вы привели в примере.
Очередная пирамида? Я так понимаю для данного uid'а (%ID%) вам нужно вывести либо кол-во всех его рефералов третьего уровня, либо просто ввывести всех рефералов или что-то другое нужно? 1. У вас много избыточной информации, её можно сократить вдвое. Мы оставим например только записи вида uid=3 fid=1 для случая, когда юзер 3 зависим от 1. 2. Выбрать всех рефералов третьего уровня: SELECT DISTINCT uid FROM list WHERE fid IN (SELECT DISTINCT uid FROM list WHERE fid IN (SELECT uid FROM list WHERE fid=%ID%)); 3. Выбрать кол-во рефералов третьего уровня: SELECT COUNT(DISTINCT uid) FROM list WHERE fid IN (SELECT DISTINCT uid FROM list WHERE fid IN (SELECT uid FROM list WHERE fid=%ID%)); 4. Выбрать кол-во рефералов третьего уровня в разбивке по рефералам второго уровня: SELECT fid,COUNT(uid) FROM list WHERE fid IN (SELECT DISTINCT uid FROM list WHERE fid IN (SELECT uid FROM list WHERE fid=%ID%)) GROUP BY fid; Но все эти решения достаточно просты, из этого следует одно из двух: либо вы слишком запутали задачу и запутались в итоге сами, либо я не понял, какой результат вы хотите получить при выполнении запроса.. Ну и ещё рекомендую пересмотреть структуру таблицы, если вам юудут нужны выборки такого вида. Почитайте про способы организации деревьев в базах данных. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |