2013-03-26 2 views
0

У меня есть два пользователя и родители.MySQL не извлекает пользователей, у которых есть пользовательский набор результатов

  1. Каждый пользователь имеет уникальный идентификатор и родительский идентификатор (это тот, кто направил его на сайт).
  2. Родитель идентификатор корневого пользователя 0.
  3. Пользователи, которые имеют тот же родительский идентификатор являются детская этого идентификатора

пользователи
идентификатор
имя
электронной


родители
идентификатор
ParentID
joiningAmount

я хочу запрос, в котором я дам идентификатор родителя. не

Этот запрос должен вернуть все его детей со следующей информацией

ID, имя, адрес электронной почты, joiningAmount (Нет в ДЕТСКО этот пользователь)

Можно ли это сделать в одном запрос?
Если нет, то как я должен нормализовать базу данных, чтобы завершить это в одном запросе.
Любая помощь очень ценится.

EDIT:

В таблице пользователей будет содержать всю информацию о пользователе

Пусть это таблица пользователей.

 
id name email 
1 Admin [email protected] 
2 John [email protected] 
3 Larry [email protected] 
4 Jone [email protected] 

Регистрация возможна только по рефералу.
Поскольку администратор не ссылается ни на кого, его parentId равен 0.
Предположим, что admin относится к larry и john (таким образом, их родительские идентификаторы равны 1), а john приводит другого пользователя от своего реферала, чье имя его jone (таким образом, его родительский идентификатор john), тогда таблица родителей должна выглядеть так.

Сумма соединения может быть проигнорирована пока как ее просто часть приложения.

 
id parentId joinAmount 
1 0  1000 
2 1  1000 
3 1  1000 
4 2  1000 

так что теперь я хочу запрос, к которому, если я передать идентификатор 1 (администраторов ид) он должен вернуть его детей

 
id, name, email, joiningAmount, (**No of Childrens this user has**) 

2, John, [email protected], 1000, 1(as john has 1 child) 
3, Larry, [email protected], 1000, 0 
+0

да, возможно. Посмотрите на 'LEFT JOIN' –

+0

, можете ли вы предоставить мне sql? –

+0

Эти две таблицы, я не вижу отношений. 'parentId' внутри' parents' немного рекурсивно и, похоже, не указывает на таблицу 'users' –

ответ

1

Опираясь на ответ по Unamata Sanatarai, вот запрос:

SELECT users.id, users.name, users.email, users.joiningAmount, 
(SELECT COUNT(*) FROM users AS children WHERE children.parent_id = users.id) AS children_count 
FROM users WHERE users.parent_id = 3 
+0

этот запрос работал хорошо после puttin всех полей в отдельной таблице. Спасибо всем за помощь –

0

Я предлагаю поместить его в только один базы данных, как так

users 
- id 
- parent_id 
- name 
- email 
- joiningAmount 

Таким образом, у вас есть только одна база данных, и вы извлекаете все с запросом, как:

SELECT id, name, email, joiningAmount FROM users WHERE parent_id = 3 
0

Предполагая, что вы не меняете таблицы как предложенные (которые вы, вероятно, следует), то соответствующий запрос будет:

SELECT users.id, users.name, users.email, parents.joiningAmount, 
    (SELECT COUNT(*) FROM parents P WHERE P.parentId=users.id) 
FROM users,parents 
WHERE users.id=parents.id; 
Смежные вопросы