2013-12-19 3 views
1

У меня есть 4 таблицы.mysql запрос не заканчивается

person ... PersonID, LASTNAME, FIRSTNAME 

users ... PersonID, IsApproved 

membership ... MembershipID, LastActiveYear 

Последняя таблица связывает их все вместе

mempershipperson ... MembershipID, PersonID 

Мне нужно создать список, показывающий;

SELECT 'LASTNAME','FIRSTNAME','PersonID','MembershipID'
WHERE 'LastActiveYear' <= 2013 AND 'IsApproved" = 1

При запуске этого запроса ниже швы продолжаться вечно. У меня должно быть около 100 строк.

SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved FROM членство M, пользователи U, человек P JOIN membershipperson MP ON MP.PersonID = P.PersonID WHERE LastActiveYear = 2012 AND IsApproved = 1

Я очень новой для всего этого, так что может быть очень очевидно только то, что я делаю неправильно с вами. Я боролся с этим в течение нескольких недель. Таким образом, мои попытки вернули более 700 000 строк бесполезных данных.

В какой-то момент мне нужно создать страницу php, чтобы сбросить все эти ошибочные биты IsActive до «0».

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

Спасибо

+2

Вы не указываете критерии для присоединения к Пользователям или Членству; поэтому база данных объединяет каждую строку с каждой другой строкой. – andrewsi

+0

Сделайте соединение с пользователями и людьми, а не включите его в раздел FROM –

+0

@andrewsi, это должен быть ответ. –

ответ

0
SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved 
FROM `membership` M 
    JOIN `membershipperson` MP ON MP.MembershipID = M.MembershipID 
    JOIN `users` U ON U.PersonID = MP.PersonID 
    JOIN `person` P ON P.PersonID = MP.PersonID 
WHERE `LastActiveYear` = 2012 AND `IsApproved` = 1 

Вы должны работать в обратном направлении от membership, к membershipperson, чтобы users и person. Операторы JOIN в измененном запросе выше делают это.

+0

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

+0

@BobCooper - на самом деле, они оба дали вам тот же ответ, как раз с JOINs в отдельном порядке – andrewsi

1
SELECT LastActiveyear, M.MembershipID, P.FIRSTNAME, P.LASTNAME, U.IsApproved 
FROM `membership` M, 
INNER JOIN `users` U ON u.MembershipID = M.MembershipID (or UserID?) 
INNER JOIN `person` P.PersonID onM.PersonID 
INNER JOIN `membershipperson` MP ON MP.PersonID = P.PersonID 
WHERE `LastActiveYear` = 2012 AND `IsApproved` = 1 

Просто любопытно, почему у вас есть пользователи и люди в виде двух разных таблиц?

+0

Большое спасибо за весь быстрый ответ. Я не проектировал таблицы db. Это связано с типами членства. Если это семейство, то все члены семьи получают одинаковый «членский идентификатор», но каждый получает уникальный «PersonID», –

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