Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN без условия ON / 12 сообщений из 12, страница 1 из 1
11.02.2015, 00:14:00
    #38876446
furashcka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Есть ли возможность склеивать таблицы без услоия ON?

Приведу пример - Есть таблица с именем пользователя и есть таблица со списком бонусов (их более 500) бонусы создают сами пользователи, как выбрать имя пользователя посчитать количество всех бонусов и посчитать бонусы которые принадлежат этому пользователю одним запросом...

Вот какой запрос я составил:

Код: sql
1.
2.
SELECT users.name, COUNT(bonus.id), COUNT(bonus.id_user=1) FROM users
LEFT JOIN bonus ON NULL WHERE users.id_user=1 LIMIT 1



Такой запрос отрабатывает! Но как то он мне не нравится... как можно избавится от этого костылика? "ON NULL"
...
Рейтинг: 0 / 0
11.02.2015, 06:03:01
    #38876505
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
furashcka,

on 1=1
...
Рейтинг: 0 / 0
11.02.2015, 06:03:35
    #38876506
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
или даже cross join
...
Рейтинг: 0 / 0
11.02.2015, 06:13:19
    #38876507
LEFT JOIN без условия ON
furashcka,

то есть, твоему серваку настолько нечего делать, что ты заставляешь его породить декартово произведение таблиц, после чего сгруппировать полученное множество, высчитывая агрегаты только для данных одного заданного пользователя? Верх иррациональности и расточительности.
...
Рейтинг: 0 / 0
11.02.2015, 07:22:25
    #38876516
furashcka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Добрый Э - Эх,
На ошибках учусь))) что посоветует более просветленный? Подскажите как в этой ситуации составить запрос?
...
Рейтинг: 0 / 0
11.02.2015, 07:52:47
    #38876531
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
furashcka,

странно, а почему бы не связать таблички по полю id_user ... что вам помешало, почему захотелось именно БЕЗ ON?
...
Рейтинг: 0 / 0
11.02.2015, 08:49:59
    #38876557
furashcka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Arhat109, мне нужно посчитать все бонусы, и посчитать все бонусы которые создал пользователь, если привяжу по id_user посчитает только те строки которые соответствуют условию, то есть не узнаю сколько всего бонусов есть...
...
Рейтинг: 0 / 0
11.02.2015, 09:05:47
    #38876566
furashcka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Кстати знает ли ктото как будет быстрее работать:

a) При создании нового бонуса, приплюсовывать к общему счетчику бонусов +1 в дополнительной таблице (count) и после склеивать таблицы
(Вытаскиваем количество записей из одной дополнительное таблици без использования COUNT() но при каждом создании бонуса обновляем дополнительную таблицу count +1)

b) Считать при каждой выборке COUNT(*)

Пример:
a)
Код: sql
1.
2.
3.
4.
SELECT user.name, count1.allBonus, count2.myBonus FROM user
LEFT JOIN  count1.allBonus ON count1.id=1 //В таблице будет только одна запись
LEFT JOIN  count2.id_user=3
WHERE user.id_user=3



b)
Код: sql
1.
2.
3.
SELECT user.name, B.allBonus, B.myBonus FROM user
JOIN (SELECT COUNT(id) AS allBonus, COUNT(IF(id_user=1,id,NULL)) AS myBonus FROM bonus) AS B
WHERE user.id_user=1
...
Рейтинг: 0 / 0
11.02.2015, 09:41:13
    #38876595
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Получите каждое данное отдельным подзапросом:

Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  (SELECT users.name FROM users WHERE users.id_user=1)
, (SELECT COUNT(bonus.id) FROM bonus)
, (SELECT COUNT(bonus.id) FROM bonus WHERE bonus.id_user=1)
/* FROM dual */ 
;



При наличии соотв. индексов вряд ли можно сделать быстрее...
...
Рейтинг: 0 / 0
11.02.2015, 10:14:02
    #38876621
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Да, возможно, в последнем подзапросе разумнее не COUNT(bonus.id), а COUNT(bonus.id_user).
...
Рейтинг: 0 / 0
11.02.2015, 10:18:14
    #38876628
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
furashcka,

Это два разных действия. Их можно решить одним запросом, но только через подзапрос, скажем в блоке select. А то что вы делаете - извините, но бред. Об чём вам уже написали.
...
Рейтинг: 0 / 0
13.02.2015, 00:41:44
    #38878618
furashcka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LEFT JOIN без условия ON
Понял! Спасибо большое всем!))))
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / LEFT JOIN без условия ON / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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