Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > MySQL: выбор данных из одного столбца


Автор: XAKEPEHOK 20.3.2012, 13:54
Долго пытался сформировать заголовок темы. Подскажите пожалуйста как быть в такой ситуации.

У меня есть таблица пользователей user, содержащей поля id (INT), username (VARCHAR), group (INT), banned (TINYINT)
Есть 2 группы: id 1 - рекламодатели и id 2 - партнеры

Код

id    username       group    banned
1     Timur          1        0
2     Ratmir         1        0
3     Slavik         2        0
4     Kalash         2        0


Еще есть таблица взаимодействий пользователей actions с полями  partnerID (INT), reklamID (INT), summ (DOUBLE)

Код

partnerID        reklamID        summ
3                1               50
4                2               90
4                1               89
3                1               63


Дамп базы-примера приложен к посту.

Я осуществляю выборку из этих двух таблиц

Код

SELECT `user`.`id`, `actions`.`summ`
FROM `user`, `actions`
WHERE `user`.`banned`=0 AND (actions.reklamID = user.ID AND user.group=1) 


И в результате получаю что-то типа

Код

id    summ
1      50
1      89
1      63
2      90


Т.е. в id я получаю id пользователя, который находится в группе со значением = 1, а мне надо получить в этом запросе еще и id пользователя с группой = 2

как это сделать? Ведь имена полей одинаковые. Подскажите пожалуйста!

Автор: gta4kv 20.3.2012, 15:05
что мешает сделать в таком духе:

Код

select a.id, b.id as otherId from table1 a, table2  

?

Автор: XAKEPEHOK 21.3.2012, 11:33
Всяко ковырялся, а можно пример на моем примере?

Автор: XAKEPEHOK 22.3.2012, 13:21
Сделал! Блин, все как всегда просто. Я не понимал как назначаются алиасы для таблиц. 
Запрос можно оптимизировать, на т.к. это пример, то для моего первого поста запрос будет таков

Код

SELECT reklam.id as reklamID , partner.id as partnerID, actions.summ
FROM user as reklam, user as partner, actions
WHERE reklam.banned=0 AND
((actions.reklamID = reklam.ID AND reklam.group=1) or (actions.partnerID = partner.ID AND partner.group=2)) 
AND reklam.ID<>partner.ID

Автор: Photon 25.3.2012, 17:51
А почему не сделать просто?
Код

SELECT `user`.`id`, `actions`.`summ`, `user`.`group`
FROM `user`, `actions`
WHERE `user`.`banned`=0 AND actions.reklamID = user.ID


Получишь всех пользователей вместе с номерами группы

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