2014 dxdy logo

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

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




 
 Вопрос по SQL
Сообщение24.12.2009, 18:14 
Аватара пользователя
Не получается выполнить одним запросом такое задание: вывести фамилию пользователя, колличество его друзей и фотографий
Код:
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 
Что значит "не работает"? Не компилируется или делает не то, что Вы ожидаете?
И что содержится в таблице INFO? Зачем там ссылки на таблицы FOTOS и FRIENDS?

 
 
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 19:01 
Аватара пользователя
Maslov в сообщении #274842 писал(а):
Что значит "не работает"? Не компилируется или делает не то, что Вы ожидаете?

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

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

 
 
 
 Re: Вопрос по SQL
Сообщение24.12.2009, 20:44 
Ваш запрос вообще не должен возвращать пользователей, у которых нет друзей или фотографий. Кроме этого, если имя пользователя (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 
Аватара пользователя
Спасибо вам огромное, а то два дня не мог разобраться. :)

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

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

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group