2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Вопрос по SQL
Сообщение24.12.2009, 18:14 
Аватара пользователя


01/12/07
172
Не получается выполнить одним запросом такое задание: вывести фамилию пользователя, колличество его друзей и фотографий
Код:
CREATE TABLE USERS(
ID_USERS AUTO_INCREMENT,
USERNAME CHAR(15),
PASWORD CHAR(10),
PRIMARY KEY(ID_USERS)
);

CREATE TABLE FOTOS(
ID_FOTO AUTO_INCREMENT,
FOTO VARCHAR(255),
USER NUMERIC(6),
FOREIGN KEY(USER) REFERENCES USERS,
PRIMARY KEY(ID_FOTO)
);

CREATE TABLE FRIENDS(
USER NUMERIC(6),
FRIEND NUMERIC(6),
FOREIGN KEY(USER) REFERENCES USERS,
FOREIGN KEY(FRIEND) REFERENCES USERS,
PRIMARY KEY(USER,FRIEND)
);

CREATE TABLE INFO(
ID_INFO AUTO_INCREMENT,
FIO CHAR(60),
ID_FOTO NUMERIC(6),
ID_FRIENDS NUMERIC(6),
ID_USERS NUMERIC(6),
PRIMARY KEY(ID_INFO),
FOREIGN KEY(ID_USERS) REFERENCES USERS,
FOREIGN KEY(ID_FOTO) REFERENCES FOTOS,
FOREIGN KEY(ID_FRIENDS) REFERENCES FRIENDS
);

запрос такого вида не работает
Код:
select FIO as name,count(FOTO),count(FRIEND)
   from INFO,FOTOS,FRIENDS
                where FOTOS.USER=(select ID_USERS from INFO where INFO.FIO=name) and FRIENDS.USER=(select ID_USERS from INFO where INFO.FIO=name)
group by name;

 Профиль  
                  
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 18:51 
Заслуженный участник


09/08/09
3438
С.Петербург
Что значит "не работает"? Не компилируется или делает не то, что Вы ожидаете?
И что содержится в таблице INFO? Зачем там ссылки на таблицы FOTOS и FRIENDS?

 Профиль  
                  
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 19:01 
Аватара пользователя


01/12/07
172
Maslov в сообщении #274842 писал(а):
Что значит "не работает"? Не компилируется или делает не то, что Вы ожидаете?

Выводит не то, что хотелось бы.
Maslov в сообщении #274842 писал(а):
И что содержится в таблице INFO? Зачем там ссылки на таблицы FOTOS и FRIENDS?

Это только часть БД. В INFO содержится информация о пользователе

 Профиль  
                  
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 20:44 
Заслуженный участник


09/08/09
3438
С.Петербург
Ваш запрос вообще не должен возвращать пользователей, у которых нет друзей или фотографий. Кроме этого, если имя пользователя (INFO.FIO) неуникально, он, на мой взгляд, должен просто упасть.

Такие вещи обычно "селектом в селекте" делаются:
Код:
select
    info.name,
    (select count(*) from friend where friend.id_users = users.id_users),
    (select count(*) from fotos where fotos.id_users = users.id_users)
from users, info
where info.id_users = users.id_users

 Профиль  
                  
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 21:33 
Аватара пользователя


01/12/07
172
Спасибо вам огромное, а то два дня не мог разобраться. :)

P.S. Не моглибы Вы посоветовать хорошую книго по SQL

 Профиль  
                  
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 22:37 
Заслуженный участник


09/08/09
3438
С.Петербург
matan в сообщении #274899 писал(а):
Не моглибы Вы посоветовать хорошую книго по SQL
Для того, чтобы эффективно применять SQL нужно:
1. Понимание общей теории баз данных (реляционная алгебра, нормализация, моделирование).
Почитать можно, например, здесь: http://www.onlinedisk.ru/file/162130/.
2. Знание конкретного диалекта SQL, на котором Вы планируете работать. В Вашем случае, насколько я понимаю, это MySQL, и, в принципе, подойдёт любая книга.
3. И, конечно, опыт.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: maxal, Toucan, PAV, Karan, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group