Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Интересное задание для sql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Запрос в INNER JOIN
trust
Отправлено: 17 Августа, 2013 - 22:46:04
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Доброго времени суток!

Разрабатываю сайт, где клиент хочет чтоб были разделы, где каждый раздел имел некоторое количество товаров, а так же хотел в будущем если ему будет нужно добавлять через админку новые разделы меню.

Так вот в чем суть:
Есть две таблицы Меню и товары

Структура такая :
[img]http://torrent.astranar.ru/file/2013-08-18_024311----(torrent.astranar.ru)----1376768596.png[/img]


В меню, напротив каждого пункта должен вестись подсчет всех товаров в разделе. Как это можно исполнить в INNER JOIN ?


-----
Никто не вечен, достойно учись.
 
 Top
SAD Модератор
Отправлено: 17 Августа, 2013 - 22:49:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




обычный select с одним join'ом + case
 
 Top
Саныч
Отправлено: 17 Августа, 2013 - 22:51:01
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Ну и при чем тут INNER JOIN?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT m.`id`, (
  2.     SELECT COUNT(0)
  3.     FROM `goods` AS g
  4.     WHERE g.`cat` = m.`id`
  5. ) AS sizeof
  6. FROM `menu` AS m
?


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
LIME
Отправлено: 17 Августа, 2013 - 23:00:01
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




джойн с этим подзапросом но с группировкой будет быстрее
только не иннер а лефт....для скорости
 
 Top
trust
Отправлено: 17 Августа, 2013 - 23:01:10
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Саныч пишет:
Ну и при чем тут INNER JOIN?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT m.`id`, (
  2.     SELECT COUNT(0)
  3.     FROM `goods` AS g
  4.     WHERE g.`cat` = m.`id`
  5. ) AS sizeof
  6. FROM `menu` AS m
?


Ничего себе вы мастер=))) Надеюсь вы работаете там где надо=)

Прошу помогите и мне с этим запросом! Я не все в нем понимаю.

Можно вас попросить поставить мои данные туда? или объяснить ваш код какое поле за что отвечает?


-----
Никто не вечен, достойно учись.
 
 Top
Саныч
Отправлено: 17 Августа, 2013 - 23:06:45
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




LIME пишет:
джойн с этим подзапросом но с группировкой будет быстрее
только не иннер а лефт....для скорости
Можете пример кинуть, а то что-то я не соображу...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
LIME
Отправлено: 17 Августа, 2013 - 23:08:02
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT menu.id, cnt
  2. FROM menu
  3. LEFT JOIN (
  4.     SELECT COUNT(0) cnt, cat
  5.     FROM goods
  6.     GROUP BY cat
  7. )  sizeof
  8. ON sizeof.cat =  menu.id

(Добавление)
запрос 1 раз вместо каждого ряда

(Отредактировано автором: 17 Августа, 2013 - 23:09:46)

 
 Top
Саныч
Отправлено: 17 Августа, 2013 - 23:14:00
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




LIME, да точно. Понял, спасибо!

trust, мой пример не смотрите, делайте как LIME говорит.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
trust
Отправлено: 17 Августа, 2013 - 23:16:33
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Ребят понять бы еще ваши поля в базах, не понимаю. Покажите ваши структуры хоть чтоб разобрать запрос.

Или подставьте мои имена таблиц и столбцов куда нужно. структура на скриншоте отображена. Я пытаюсь понять не могу догнать..


-----
Никто не вечен, достойно учись.
 
 Top
Саныч
Отправлено: 17 Августа, 2013 - 23:54:56
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, cnt
  2. FROM trust_menu_link AS m
  3. LEFT JOIN (
  4.     SELECT COUNT(0) AS cnt, cat
  5.     FROM trust_tovar AS t
  6.     GROUP BY cat
  7. ) AS sizeof
  8.     ON sizeof.cat = m.id

С вашими названиями таблиц, полей.

(Отредактировано автором: 17 Августа, 2013 - 23:55:16)



-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
trust
Отправлено: 18 Августа, 2013 - 00:21:03
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Саныч пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT id, cnt
  2. FROM trust_menu_link AS m
  3. LEFT JOIN (
  4.     SELECT COUNT(0) AS cnt, cat
  5.     FROM trust_tovar AS t
  6.     GROUP BY cat
  7. ) AS sizeof
  8.     ON sizeof.cat = m.id

С вашими названиями таблиц, полей.


Спасибо. Немного неверно, ладно разберусь.


-----
Никто не вечен, достойно учись.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB