2014-12-09 2 views
0

У меня есть одна таблица выглядит следующим образом:ВЫБРАТЬ результат в одной таблице depeding другой ВЫБРАТЬ в той же таблице

`team_by_membre` (
    `id_team_by_membre` int(11) NOT NULL AUTO_INCREMENT, 
    `id_membre` int(11) NOT NULL, 
    `id_team` int(11) NOT NULL, 
    `level` int(2) NOT NULL COMMENT) 

В этой таблице, я пытаюсь сделать список всех членов, которые являются частью команды управляемый одним членом (управляющим). Команда управляется членом, если уровень = 1 (уровень = 0 игроков). Чтобы уточнить: в этой таблице у вас много игроков для многих команд и для каждой команды один менеджер (уровень = 1).

Чтобы узнать команду, управляемую мой менеджер:

SELECT rm.id_team 
    FROM team_by_membre rm 
    WHERE rm.id_membre = ? 
    AND rm.level = '1' 

(в моей текущей таблице, один из членов управляют 3 команд)

Но как мне сделать список всех игроков (участников) в этой таблице, которые являются частью команды, управляемой этим менеджером? Есть идеи?

+0

все игроки в одной и той же команды есть уникальный id_team ??? –

ответ

1
SELECT 
    * 
FROM 
    team_by_membre 
WHERE 
    id_team IN (
    SELECT 
     id_team 
    FROM 
     team_by_membre 
    WHERE 
     id_membre = ? 
    AND 
     level = 1 
); 
+0

так просто; Спасибо чувак! –

+0

похоже, что это можно сделать, присоединив таблицу к себе, а не к подзапросу, что обычно лучше ... – RobP

+0

@Kouber: на самом деле он не работает: # 1242 - Подзапрос возвращает более 1 строки (что логично, потому что один член может изменить несколько команд) –

1

Использование объединения должно быть быстрее, чем вложенный запрос и довольно проста:

SELECT t.* 
FROM team_by_membre t 
JOIN team_by_membre mgr 
WHERE t.id_team=mgr.id_team 
AND mgr.level = 1 
AND mgr.id_membre = ? 
+0

Я запускаю два запроса, и это то же самое с точки зрения времени (но на данный момент в моей таблице несколько записей). Спасибо, что преподал мне несколько трюков сегодня –

Смежные вопросы