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 :: LEFT JOIN и COUNT

 PHP.SU

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


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

> Без описания
puta
Отправлено: 15 Октября, 2011 - 16:26:31
Post Id


Новичок


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


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




Здравствуйте. Имеем такой запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT categories_content.id, COUNT(categories_content.id) AS `count`, languages.title,languages.alias,languages.id
  2.                     FROM `categories_content`
  3.                     LEFT JOIN `languages` ON (categories_content.LANGUAGE = languages.alias) WHERE categories_content.category_id = 0
  4.                     GROUP BY languages.alias
  5.                     ORDER BY languages.alias


Проблема в том, что он не возвращает записи где COUNT(categories_content.id) = 0, как с этим бороться?
 
 Top
caballero
Отправлено: 15 Октября, 2011 - 16:50:43
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




записи возвращаются в зависимости от условия WHERE categories_content.category_id = 0
а не от того какой та count


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Champion Супермодератор
Отправлено: 15 Октября, 2011 - 16:51:10
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Какой-то бессмысленный запрос. Что он должен посчитать?
 
 Top
puta
Отправлено: 15 Октября, 2011 - 16:53:10
Post Id


Новичок


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


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




[quote=Champion][/quote]
Запрос должен вывести список языков с подсчитанным количеством страниц у которых айди категории = 0
 
 Top
Champion Супермодератор
Отправлено: 15 Октября, 2011 - 16:53:29
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Если "сколько категорий каждого языка", то запрос скорее всего должен быть такой:
CODE (SQL):
скопировать код в буфер обмена
  1.    
  2. SELECT COUNT(DISTINCT ca.id) AS `count`, la.title,la.alias,la.id
  3. FROM `languages` la
  4. LEFT JOIN `categories_content`ca ON ca.LANGUAGE = la.alias AND ca.id = 0
  5. GROUP BY la.alias
  6. ORDER BY la.alias
 
 Top
tuareg
Отправлено: 15 Октября, 2011 - 16:56:04
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




Попробуйте
LEFT JOIN замените на right JOIN
Если нет выложите таблицы и что должен делать запрос
 
 Top
puta
Отправлено: 15 Октября, 2011 - 18:02:00
Post Id


Новичок


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


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




Champion
Ругается на несуществующее поле categories_content.id

(Отредактировано автором: 15 Октября, 2011 - 18:02:32)

 
 Top
White
Отправлено: 15 Октября, 2011 - 18:03:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


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




проблема с JOIN и COUNT действительно есть. и без подзапроса она не решается.
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT categories_content.id,
  2. (SELECT COUNT(*) FROM `categories_content`) AS `count`,
  3. languages.title,
  4. languages.alias,
  5. languages.id
  6. FROM `categories_content`
  7. LEFT JOIN `languages` ON (categories_content.LANGUAGE = languages.alias) WHERE categories_content.category_id = 0
  8. GROUP BY languages.alias
  9. ORDER BY languages.alias


-----
if(time()>1356048000) die();
 
 Top
puta
Отправлено: 15 Октября, 2011 - 18:09:12
Post Id


Новичок


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


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




White
Ваш запрос возвращает только языки в которых страницы есть, а в которых их ноль не возвращает
 
 Top
Champion Супермодератор
Отправлено: 15 Октября, 2011 - 18:13:49
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




puta пишет:
Ругается на несуществующее поле categories_content.id
надо заменить на ca.id
(Добавление)
Поправил свой запрос. Там вообще много чего заменить надо было)
 
 Top
puta
Отправлено: 15 Октября, 2011 - 18:16:17
Post Id


Новичок


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


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




Champion
Пробовал - тогда запрос возвращает 0 в count. В других случаях там где есть записи они считаются правильно
 
 Top
Champion Супермодератор
Отправлено: 15 Октября, 2011 - 18:17:05
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




White пишет:
проблема с JOIN и COUNT действительно есть. и без подзапроса она не решается.
Не правда. Во-первых, никакой такой проблемы нет Улыбка А поскольку ее нет, то можно обойтись без подзапроса.
Проблема на самом деле в том, что некоторые не видят разница в условиях, указаных в where и в условиях, указанных в ON в запросах с внешними объединениями
(Добавление)
puta пишет:
запрос возвращает 0 в count. В других случаях там где есть записи они считаются правильно
А разве не это надо? Где записи есть - считается правильно, где нет - там 0 - логично, по-моему
 
 Top
puta
Отправлено: 15 Октября, 2011 - 18:19:34
Post Id


Новичок


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


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




Champion пишет:
А разве не это надо? Где записи есть - считается правильно, где нет - там 0 - логично, по-моему

Я видимо не совсем правильно объяснил )
Сейчас возвращает
count title alias id
0 English en 2
0 Русский ru 1

А в предыдущих случаях возвращало только
count title alias id
7 English ru 1

А задача в том чтобы вернуло
0 English en 2
7 Русский ru 1

(Отредактировано автором: 15 Октября, 2011 - 18:20:46)

 
 Top
Champion Супермодератор
Отправлено: 15 Октября, 2011 - 18:27:29
Post Id



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


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




Думаю, что нужен дамп обоих таблиц.
Я так понял есть статьи на русском. Например 8 штук, из них 3 - с id = 0. Соответственно для русского будет цифра 3. Есть английсикй язык. На нем ни одной статьи с id = 0 - возврещается 0
 
 Top
puta
Отправлено: 15 Октября, 2011 - 18:33:42
Post Id


Новичок


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


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




Champion пишет:
Я так понял есть статьи на русском. Например 8 штук, из них 3 - с id = 0. Соответственно для русского будет цифра 3.


да, верно

CODE (SQL):
скопировать код в буфер обмена
  1. --
  2. -- Структура таблицы `languages`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `languages` (
  6.   `id` int(11) NOT NULL AUTO_INCREMENT,
  7.   `title` varchar(250) NOT NULL,
  8.   `alias` varchar(5) NOT NULL,
  9.   `default` int(11) NOT NULL,
  10.   PRIMARY KEY (`id`),
  11.   UNIQUE KEY `alias` (`alias`)
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
  13.  
  14. --
  15. -- Дамп данных таблицы `languages`
  16. --
  17.  
  18. INSERT INTO `languages` (`id`, `title`, `alias`, `default`) VALUES
  19. (1, 'Русский', 'ru', 1),
  20. (2, 'English', 'en', 0);
  21.  
  22.  
  23. --
  24. -- Структура таблицы `categories_content`
  25. --
  26.  
  27. CREATE TABLE IF NOT EXISTS `categories_content` (
  28.   `id` int(11) NOT NULL AUTO_INCREMENT,
  29.   `title` varchar(250) NOT NULL,
  30.   `url` varchar(250) NOT NULL,
  31.   `language` varchar(3) NOT NULL,
  32.   `category_id` int(11) NOT NULL,
  33.   `position` int(11) DEFAULT NULL,
  34.   `content` text NOT NULL,
  35.   `meta_title` varchar(250) NOT NULL,
  36.   `meta_keywords` varchar(250) NOT NULL,
  37.   `meta_description` varchar(250) NOT NULL,
  38.   `publication_date_start` int(11) NOT NULL DEFAULT '0',
  39.   `publication_date_end` int(11) NOT NULL DEFAULT '0',
  40.   `enabled` int(11) NOT NULL,
  41.   `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  42.   `author` varchar(50) NOT NULL,
  43.   PRIMARY KEY (`id`),
  44.   FULLTEXT KEY `SearchByTitle` (`title`,`url`)
  45. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
  46.  
  47. --
  48. -- Дамп данных таблицы `categories_content`
  49. --
  50.  
  51. INSERT INTO `categories_content` (`id`, `title`, `url`, `language`, `category_id`, `position`, `content`, `meta_title`, `meta_keywords`, `meta_description`, `publication_date_start`, `publication_date_end`, `enabled`, `created`, `author`) VALUES
  52. (15, 'Set postion', 'set-postion', 'ru', 0, 666, '', '', '', '', 0, 0, 1, '2011-10-14 20:28:11', ''),
  53. (23, 'zzz', 'zzz', 'ru', 2, 0, '', '', '', '', 0, 0, 1, '2011-10-15 06:44:26', ''),
  54. (21, '123123', '123123', 'ru', 0, 0, '', '', '', '', 0, 0, 1, '2011-10-14 22:13:50', ''),
  55. (22, 'asdasd', 'asdasd', 'ru', 3, 0, '', '', '', '', 0, 0, 1, '2011-10-15 06:42:23', ''),
  56. (20, 'sdfsdf', 'sdfsdf', 'ru', 3, 0, '', '', '', '', 0, 0, 1, '2011-10-14 22:13:08', ''),
  57. (24, 'lll', 'lll', 'ru', 1, 0, '', '', '', '', 0, 0, 1, '2011-10-15 08:54:01', ''),
  58. (25, ';', '', 'ru', 14, 0, '<p>\n       ll</p>\n', '', '', '', 0, 0, 1, '2011-10-15 09:34:27', '');

(Отредактировано автором: 15 Октября, 2011 - 18:34:08)

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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB