извлечение всех деталей независимо от условий - PullRequest
0 голосов
/ 11 июля 2011

Привет! У меня есть запрос, который будет получать членов, у которых тип метода оплаты - cash, а memberstatustype имеют идентификаторы 2, 3, 6. Запрос работает нормально, когда у членов есть метод оплаты - наличные, дд и карта, но он получит все данные о членах, у которых нет платежа, это карта, и это мой запрос

SELECT members.member_Id, members.member_Lastname, members.member_Firstname, members.member_PostCode,members.member_Reference,  members.member_Dob,30*memberToMship_ChargePerPeriod/DateDiff(memberToMship_EndDate, memberToMship_StartDate) As monthly_amount, mshiptypes.mshipType_Name, mshipstatustypes.mshipStatusType_Name,membertomships.memberToMship_EndDate,IF(mshipOption_Period='year', TIMESTAMPDIFF (YEAR,memberToMship_StartDate, memberToMship_EndDate),  TIMESTAMPDIFF (MONTH ,memberToMship_StartDate,memberToMship_EndDate ) ) *memberToMship_ChargePerPeriod As Total 
FROM members 
LEFT JOIN membertomships ON membertomships.member_Id = members.member_Id 
LEFT JOIN mshipstatustypes ON mshipstatustypes.mshipStatusType_Id = membertomships.mshipStatusType_Id 
LEFT JOIN mshipoptions ON mshipoptions.mshipOption_Id = membertomships.mshipOption_Id 
LEFT JOIN mshiptypes ON mshiptypes.mshipType_Id = mshipoptions.mshipType_Id 
WHERE 
    membertomships.memberToMship_PayMethod='Card' OR  mshipstatustypes.mshipStatusType_Id='2' OR  mshipstatustypes.mshipStatusType_Id = '3'  OR mshipstatustypes.mshipStatusType_Id='6';

Может ли кто-нибудь помочь мне в этом .... я делаю что-то неправильно в "ИЛИ состоянии"

Ответы [ 3 ]

1 голос
/ 11 июля 2011
SELECT members.member_Id, members.member_Lastname, members.member_Firstname, members.member_PostCode,members.member_Reference,  members.member_Dob,30*memberToMship_ChargePerPeriod/DateDiff(memberToMship_EndDate, memberToMship_StartDate) As monthly_amount, mshiptypes.mshipType_Name, mshipstatustypes.mshipStatusType_Name,membertomships.memberToMship_EndDate,IF(mshipOption_Period='year', TIMESTAMPDIFF (YEAR,memberToMship_StartDate, memberToMship_EndDate),  TIMESTAMPDIFF (MONTH ,memberToMship_StartDate,memberToMship_EndDate ) ) *memberToMship_ChargePerPeriod As Total 
FROM members 
LEFT JOIN membertomships ON membertomships.member_Id = members.member_Id 
LEFT JOIN mshipstatustypes ON mshipstatustypes.mshipStatusType_Id = membertomships.mshipStatusType_Id 
LEFT JOIN mshipoptions ON mshipoptions.mshipOption_Id = membertomships.mshipOption_Id 
LEFT JOIN mshiptypes ON mshiptypes.mshipType_Id = mshipoptions.mshipType_Id 
WHERE membertomships.memberToMship_PayMethod='Card' 
  AND  mshipstatustypes.mshipStatusType_Id in ('2', '3', '6');
1 голос
/ 11 июля 2011

Ваше предложение WHERE должно выглядеть следующим образом:

WHERE membertomships.memberToMship_PayMethod='Card' 
AND (mshipstatustypes.mshipStatusType_Id='2' 
OR  mshipstatustypes.mshipStatusType_Id = '3'  
OR mshipstatustypes.mshipStatusType_Id='6');

Ваш исходный запрос ищет людей, у которых есть один из них:

  • membertomships.memberToMship_PayMethod = 'Card'
  • mshipstatustypes.mshipStatusType_Id = '2'
  • mshipstatustypes.mshipStatusType_Id = '3'
  • mshipstatustypes.mshipStatusType_Id = '6' * 101 * you * 101 * 101 * you
  • membertomships.memberToMship_PayMethod = 'Card'

И один из следующих:

  • mshipstatustypes.mshipStatusType_Id = '2 '
  • mshipstatustypes.mshipStatusType_Id =' 3 '
  • mshipstatustypes.mshipStatusType_Id =' 6 '
0 голосов
/ 11 июля 2011

Вы также можете использовать это, где это работает быстрее

WHERE membertomships.memberToMship_PayMethod='Card' 
AND mshipstatustypes.mshipStatusType_Id in('2','3','6') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...