Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Снова выборка из двух таблиц, Подсчет записей в табл. 1 плюс табл. 2 
:(
    Опции темы
KonstRuctor
Дата 27.12.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Привет!
Есть две таблицы:
users
Код

user_id | name | email |web

gallery
Код

gallery_id | user_id | foto

Задача:
У некоторых юзеров может быть много фото, у некоторых нет вообще.
Нужно узнать кол-во юзеров, у которых есть хотя бы одно фото.
Таблицы никак не связаны. mysql версия 4.1.16
Я делаю так:
Код

SELECT count(v.user_id) as cnt, o.user_id
FROM users v, gallery o
WHERE v.user_id = o.user_id
GROUP BY v.user_id

Разумеется, получаю полную лажу: я сделал тестовые таблицы и могу руками сосчитать, сколько в итоге должно получиться.
С наступающими!
PM MAIL WWW ICQ   Вверх
Dremlin
Дата 27.12.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Quo vadis?
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 21.9.2006
Где: Киев

Репутация: нет
Всего: 4



Если таблицы не связаны логически, то любой запрос вернет тебе лажу.
Иначе:

Код

SELECT count(users_with_photo.*)
FROM
(
   SELECT u.user_id, u.name, count(g.user_id) as cnt
   FROM users u JOIN gallery g ON u.user_id=g.user_id
   GROUP BY u.user_id, u.name
   HAVING count(g.user_id) > 0
) users_with_photo


Это сообщение отредактировал(а) Dremlin - 27.12.2006, 14:48
--------------------
Каждый дурак знает, что до звезд не достать, а умные, не обращая внимания на дураков, пытаются...
PM MAIL   Вверх
muzer
Дата 27.12.2006, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Код

SELECT COUNT(DISTINCT user_id) FROM gallery

PM WWW   Вверх
KonstRuctor
Дата 28.12.2006, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



Dremlin, не выходит каменный цветок...
ошибку выдает:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*) FROM ( SELECT u.user_id, count(

muzer, мысль верная - зайти с этой таблицы.
Попробую переписать алгоритм. Спасибо
PM MAIL WWW ICQ   Вверх
muzer
Дата 28.12.2006, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



KonstRuctor, это была не мысль, а полное решение поставленной задачи smile
Если задача на самом деле другая, то милости просим, излагайте)
PM WWW   Вверх
KonstRuctor
Дата 28.12.2006, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 31.3.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: нет



muzer, 
Когда я вывожу данные из базы, я делаю постраничный вывод.
Поэтому алгоритм у меня такой:

1) Посчитать всех юзеров, кто заплейсил фотки, получить переменную $amount
2) Снова вызвать тот же запрос , но уже без COUNT и с лимитом (скажем 10 на стр.)
3) Вывожу на экран навигационную панель (для нее необходим $amount)
4) Вывожу на экран данные.
5) Внизу можно повторить навигационную панель.

Согласен, что я в первом сообщении не точно поставил вопрос.
Сейчас я просто подошел к решению с таблицы gallery и все заработало отлично.

Нужно привести мой полученный код в упрощенном виде или тема закрыта?
В любом случае -- спасибо!
PM MAIL WWW ICQ   Вверх
muzer
Дата 28.12.2006, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Да не за что.
А про тему это вам решать закрыта или нет smile

Почитайте ещё о ключевом слове "SQL_CALC_FOUND_ROWS" в SELECT Syntax, возможно пригодится для программирования описанной листалки. Даёт возможность после выполнения запроса с каким-либо LIMIT'ом получить ответ на вопрос "а сколько бы вернулось строк, если бы не было лимита".
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0442 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.