Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > 2 табл., извлеч данные по двум параметрам


Автор: numerovan 18.9.2013, 13:53
Здравствуйте, ломаю голову над решением, если кто знает, подскажите пожалуйста.
Данные следующие:
1. есть таблица с пользователями (имя, фамилия, год рождения и т.д.)
2. так же есть таблица с друзьями (данные о дружбе), она выглядит так:
-------id------|------user-----|------friend---|---confirm----|-----the_time---|
-------1------|------100------|-------300-----|------0--------|-----(время)-----|
-------2------|------200------|-------100-----|------0--------|-----(время)-----|
-------3------|------100------|-------400-----|------0--------|-----(время)-----|
-------4------|------100------|-------500-----|------0--------|-----(время)-----|

под цифрой 100, это допустим текущий пользователь, он предлогает дружбу юзеру под id 300 (первая строчка), 
(вторая строчка) юзер под id 200 предложил дружбу мне (100) , но я её не подтвердил, поэтому и 0 (ноль) стоит.
Необходимо вывести данные из столбцов user и friend, но не равное моему id (100) с "confirm=0", и по этим id (не с текущим пользователем) подцепить информацию по первой таблице, там где находиться полная информация о пользователе, и нужно the_time, из второй таблице, прицепить к общему выводу информации, допустим с права. В итоге получиться список из ЗАЯВОК НА ДРУЖБУ пользователей сайта с указанием времяни на заявку.
Надеюсь доступно объяснил.
         

Автор: Akina 18.9.2013, 16:44
Цитата(numerovan @  18.9.2013,  14:53 Найти цитируемый пост)
Надеюсь доступно объяснил.

Напрасно... надо было объяснять только задачу, и не добавлять к ней своё вИдение пути её решения...

Цитата(numerovan @  18.9.2013,  14:53 Найти цитируемый пост)
В итоге получиться список из ЗАЯВОК НА ДРУЖБУ пользователей сайта с указанием времяни на заявку

типа
Код

select u.name,f.time
from friends f, users u
where f.user=100
and f.friend=u.id
and f.confirm=0

Автор: numerovan 18.9.2013, 17:03
Поробывал сделать данное решение, с помощью вышеуказанного примера, не получилось так как хотел.
В последнем решении выбираються ЗАЯВКИ НА ДРУЖБУ (confirm=0) исходящие от меня (id=100) , но хотелось бы взять ещё и каторые я отправил людям.
Покажу на примере:
Из этого
-----100----|-----200-----|----0----|
-----300----|-----100-----|----0----|
-----100----|-----400-----|----0----|
-----100----|-----500-----|----0----|
-----100----|-----600-----|----0----|
сейчас получаеться что выбирает только
-----100----|-----200-----|----0----|
-----100----|-----400-----|----0----|
-----100----|-----500-----|----0----|
-----100----|-----600-----|----0----|
этот момент "-----300----|-----100-----|----0----|", а именно цифра 300 не берёться (пропускаеться). Мне бы и её тоже бы подхватить и чтоб в итоге получилось типа
-----200----|-----time-----|
-----300----|-----time-----|
-----400----|-----time-----|
-----500----|-----time-----|
-----600----|-----time-----|
(id = 100 тут нет, это типо id текущ. пользователя и его не должно быть)

Добавлено через 7 минут и 44 секунды
вроде получилось )))) ...
Код

SELECT U.*, F.the_time FROM friends F, users U WHERE (F.user=100 and F.friend=U.profile_id AND F.confirm=0) OR (F.user=U.profile_id and F.friend=100 AND F.confirm=0)

 спасибо за верное направление )

Автор: Akina 18.9.2013, 17:11
Глупость получится, право слово... с другой стороны - а мне не пофиг?
Код

select u.name,f.time
from friends f, users u
where f.user=100
and f.friend=u.id
and f.confirm=0
union
select u.name,f.time
from friends f, users u
where f.friend=100
and f.user=u.id
and f.confirm=0

Автор: numerovan 18.9.2013, 17:21
да, так тоже хорошо получилось! возьму ваш вариант, спасибо ещё раз!

Автор: numerovan 19.9.2013, 14:17
Снова вопрос появился: как вышеуказанное решение отсортировать по времени (f.time) ?

Автор: Akina 19.9.2013, 14:22
Иди уже прочитай по SQL ну хоть что-нибудь!

Автор: FINANSIST 2.10.2013, 08:24
Код

order by f.time 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)