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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при выводе данных их двух таблиц 
V
    Опции темы
Gold Dragon
  Дата 18.12.2010, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Есть две базы (уж извините что большой код выкладываю)

Код

CREATE TABLE `zb_zontikbar` (
  `id` int(11) NOT NULL auto_increment,
  `id_user` int(11) NOT NULL,
  `name` varchar(60) NOT NULL,
  `id_region` tinyint(2) NOT NULL,
  `id_city` int(11) default NULL,
  `id_street` int(11) default NULL,
  `number` varchar(10) NOT NULL,
  `date_modif` date NOT NULL,
  `map_x` float(9,6) NOT NULL,
  `map_y` float(9,6) NOT NULL,
  `description` text NOT NULL,
  `comments` tinyint(1) NOT NULL,
  `published` tinyint(1) NOT NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `zb_zontikbar` VALUES (1, 62, 'ЙЙЙ', 68, 1, 1, '77', '2010-06-16', 52.625374, 48.736271, '', 1, 1);

CREATE TABLE `zb_zontikbar_region` (
  `id` tinyint(2) NOT NULL auto_increment,
  `name` varchar(250) default NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `zb_zontikbar_region` VALUES (1, 'Адыгея, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (4, 'Алтай, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (22, 'Алтайский край');
INSERT INTO `zb_zontikbar_region` VALUES (28, 'Амурская область');
INSERT INTO `zb_zontikbar_region` VALUES (29, 'Архангельская область');
INSERT INTO `zb_zontikbar_region` VALUES (30, 'Астраханская область');
INSERT INTO `zb_zontikbar_region` VALUES (99, 'Байконур');
INSERT INTO `zb_zontikbar_region` VALUES (2, 'Башкортостан, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (31, 'Белгородская область');
INSERT INTO `zb_zontikbar_region` VALUES (32, 'Брянская область');
INSERT INTO `zb_zontikbar_region` VALUES (3, 'Бурятия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (33, 'Владимирская область');
INSERT INTO `zb_zontikbar_region` VALUES (34, 'Волгоградская область');
INSERT INTO `zb_zontikbar_region` VALUES (35, 'Вологодская область');
INSERT INTO `zb_zontikbar_region` VALUES (36, 'Воронежская область');
INSERT INTO `zb_zontikbar_region` VALUES (5, 'Дагестан, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (79, 'Еврейская Аобл');
INSERT INTO `zb_zontikbar_region` VALUES (75, 'Забайкальский край');
INSERT INTO `zb_zontikbar_region` VALUES (80, 'Забайкальский край, Агинский Бурятский округ');
INSERT INTO `zb_zontikbar_region` VALUES (37, 'Ивановская область');
INSERT INTO `zb_zontikbar_region` VALUES (6, 'Ингушетия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (38, 'Иркутская область');
INSERT INTO `zb_zontikbar_region` VALUES (85, 'Иркутская область, Усть-Ордынский Бурятский округ');
INSERT INTO `zb_zontikbar_region` VALUES (7, 'Кабардино-Балкарская Республика');
INSERT INTO `zb_zontikbar_region` VALUES (39, 'Калининградская область');
INSERT INTO `zb_zontikbar_region` VALUES (8, 'Калмыкия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (40, 'Калужская область');
INSERT INTO `zb_zontikbar_region` VALUES (41, 'Камчатский край');
INSERT INTO `zb_zontikbar_region` VALUES (9, 'Карачаево-Черкесская Республика');
INSERT INTO `zb_zontikbar_region` VALUES (10, 'Карелия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (42, 'Кемеровская область');
INSERT INTO `zb_zontikbar_region` VALUES (43, 'Кировская область');
INSERT INTO `zb_zontikbar_region` VALUES (11, 'Коми, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (81, 'Коми-Пермяцкий АО');
INSERT INTO `zb_zontikbar_region` VALUES (82, 'Корякский АО');
INSERT INTO `zb_zontikbar_region` VALUES (44, 'Костромская область');
INSERT INTO `zb_zontikbar_region` VALUES (23, 'Краснодарский край');
INSERT INTO `zb_zontikbar_region` VALUES (24, 'Красноярский край');
INSERT INTO `zb_zontikbar_region` VALUES (45, 'Курганская область');
INSERT INTO `zb_zontikbar_region` VALUES (46, 'Курская область');
INSERT INTO `zb_zontikbar_region` VALUES (47, 'Ленинградская область');
INSERT INTO `zb_zontikbar_region` VALUES (48, 'Липецкая область');
INSERT INTO `zb_zontikbar_region` VALUES (49, 'Магаданская область');
INSERT INTO `zb_zontikbar_region` VALUES (12, 'Марий Эл, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (13, 'Мордовия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (77, 'Москва');
INSERT INTO `zb_zontikbar_region` VALUES (50, 'Московская область');
INSERT INTO `zb_zontikbar_region` VALUES (51, 'Мурманская область');
INSERT INTO `zb_zontikbar_region` VALUES (83, 'Ненецкий АО');
INSERT INTO `zb_zontikbar_region` VALUES (52, 'Нижегородская область');
INSERT INTO `zb_zontikbar_region` VALUES (53, 'Новгородская область');
INSERT INTO `zb_zontikbar_region` VALUES (54, 'Новосибирская область');
INSERT INTO `zb_zontikbar_region` VALUES (55, 'Омская область');
INSERT INTO `zb_zontikbar_region` VALUES (56, 'Оренбургская область');
INSERT INTO `zb_zontikbar_region` VALUES (57, 'Орловская область');
INSERT INTO `zb_zontikbar_region` VALUES (58, 'Пензенская область');
INSERT INTO `zb_zontikbar_region` VALUES (59, 'Пермский край');
INSERT INTO `zb_zontikbar_region` VALUES (25, 'Приморский край');
INSERT INTO `zb_zontikbar_region` VALUES (60, 'Псковская область');
INSERT INTO `zb_zontikbar_region` VALUES (61, 'Ростовская область');
INSERT INTO `zb_zontikbar_region` VALUES (62, 'Рязанская область');
INSERT INTO `zb_zontikbar_region` VALUES (63, 'Самарская область');
INSERT INTO `zb_zontikbar_region` VALUES (78, 'Санкт-Петербург');
INSERT INTO `zb_zontikbar_region` VALUES (64, 'Саратовская область');
INSERT INTO `zb_zontikbar_region` VALUES (14, 'Саха (Якутия), Республика');
INSERT INTO `zb_zontikbar_region` VALUES (65, 'Сахалинская область');
INSERT INTO `zb_zontikbar_region` VALUES (66, 'Свердловская область');
INSERT INTO `zb_zontikbar_region` VALUES (15, 'Северная Осетия - Алания, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (67, 'Смоленская область');
INSERT INTO `zb_zontikbar_region` VALUES (26, 'Ставропольский край');
INSERT INTO `zb_zontikbar_region` VALUES (84, 'Таймырский (Долгано-Ненецкий) АО');
INSERT INTO `zb_zontikbar_region` VALUES (68, 'Тамбовская область');
INSERT INTO `zb_zontikbar_region` VALUES (16, 'Татарстан, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (69, 'Тверская область');
INSERT INTO `zb_zontikbar_region` VALUES (70, 'Томская область');
INSERT INTO `zb_zontikbar_region` VALUES (71, 'Тульская область');
INSERT INTO `zb_zontikbar_region` VALUES (17, 'Тыва (Тува), Республика');
INSERT INTO `zb_zontikbar_region` VALUES (72, 'Тюменская область');
INSERT INTO `zb_zontikbar_region` VALUES (18, 'Удмуртская Республика');
INSERT INTO `zb_zontikbar_region` VALUES (73, 'Ульяновская область');
INSERT INTO `zb_zontikbar_region` VALUES (27, 'Хабаровский край');
INSERT INTO `zb_zontikbar_region` VALUES (19, 'Хакасия, Республика');
INSERT INTO `zb_zontikbar_region` VALUES (86, 'Ханты-Мансийский АО - Югра');
INSERT INTO `zb_zontikbar_region` VALUES (74, 'Челябинская область');
INSERT INTO `zb_zontikbar_region` VALUES (20, 'Чеченская Республика');
INSERT INTO `zb_zontikbar_region` VALUES (21, 'Чувашская (Чувашия) Республика');
INSERT INTO `zb_zontikbar_region` VALUES (87, 'Чукотский АО');
INSERT INTO `zb_zontikbar_region` VALUES (88, 'Эвенкийский АО');
INSERT INTO `zb_zontikbar_region` VALUES (89, 'Ямало-Ненецкий АО');
INSERT INTO `zb_zontikbar_region` VALUES (76, 'Ярославская область');


Выполняю запрос
Код

SELECT a.id, a.name
FROM zb_zontikbar_region AS a
LEFT JOIN zb_zontikbar AS b ON a.id = b.id_region
GROUP BY b.id_region


Выдаёт мне две записи вместо одной
Код

id    name
1    Адыгея, Республика
68    Тамбовская область


в чём моя ошибка?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Zloxa
Дата 18.12.2010, 17:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Вы выполняете левое соединение, т.е. берете все содержимое таблицы zb_zontikbar_region и присоединяете к ней те значения таблицы zb_zontikbar, которые соответствуют критерию объединения. Т.о. вы получаете все содержимое таблицы регионов, к которому добавлен один зонтик бар, остальные значения зотникбара равны Null. Далее вы групируетесь по id_region. В результирующем наборе два значения id_region =1 и is null, т.о. вы получаете две группы. Для каждой из групп вы отображаете первые попавшиеся значения id,name. Для группы =1, которая имеет одну запись, первые попавшие оказываются достоверными, однако прогнозировать какие данные будут возвращены для второй группы, которая содержит более одной записи - дело не благодарное.
Цитата(Gold Dragon @  18.12.2010,  15:25 Найти цитируемый пост)
в чём моя ошибка? 

Ваш запрос не содержит ошибок. Он выполняет ровно то, что Вы ему указали. А так как Вы не потрудились изложить чего вы хотели добиться, остается только гадать.

Очень вероятно что вы пытались написать этот запрос:
Код

SELECT a.id, a.name
FROM zb_zontikbar_region AS a
JOIN zb_zontikbar AS b ON a.id = b.id_region




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gold Dragon
Дата 18.12.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Zloxa, большое спасибо что решил проблему и домыслил что я хотел smile Должны выводиться только те записи которые есть в другой базе.. Всё работает ;)

Добавлено через 8 минут и 22 секунды
вот только маленькое замечание... Правильнее наверное будет писать не JOIN а RIGHT JOIN 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Zloxa
Дата 18.12.2010, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(Gold Dragon @  18.12.2010,  17:44 Найти цитируемый пост)
 Правильнее наверное будет писать не JOIN а RIGHT JOIN  

это зависит от того что вам нужно.
Но опять таки, вы ведь держите это в секрете.

в случае join, что есть суть inner join, вам не будут возвращены записи, для которых не найдено записей, соответствующих указанным Вами критериям соедения.
В случае right join, Вы получите все значения таблицы zb_zontikbar_region, даже те, для которых не будет найдено соответствия.

Это сообщение отредактировал(а) Zloxa - 18.12.2010, 18:02


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gold Dragon
Дата 18.12.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



ну в любом случае спасибо... Я хоть теперь до конца разобрался что за зверь JOIN, а то раньше как обезьяна его только использовал smile

зы
что-то сегодня у меня с объяснениями туго smile

Есть таблица регионов и есть таблица ресторанов, где указывается регионы (ID). У меня есть фильтр, но чтобы не выводить все региона вот я и решил выводить только те которые используются во второй таблице

Добавлено через 9 минут и 22 секунды
а RIGHT потому что во второй таблице не может быть так чтобы в первой не было соответствия


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




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


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

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