|
Тема
|
Въпрос за една MySQL заявка
|
|
Автор |
Dakota (erotoman) |
Публикувано | 09.05.03 18:16 |
|
Имам 3 таблици: USER, MISSION и OBJECT_HISTORY.
Всеки USER може да има много MISSION-и, а всеки MISSION си има по едно OBJECT_HISTORY, където се указват разни параметри за него.
Целта ми е да изкарам всички USER-и, със съответните им MISSION-и, при условие, че полето object_status в OBJECT_HISTORY е равно на 1.
И ето какво правя:
SELECT
...
FROM
USER u LEFT OUTER JOIN MISSION m
ON
u.user_sid=m.user_sid LEFT JOIN OBJECT_HISTORY o
ON
o.object_history_sid=m.object_history_sid
WHERE
o.object_status_sid=1 OR o.object_history_sid IS NULL
Излизат всички потребители, които имат активни мисии или изобщо нямат. Но! Имам и потребители, които имат само неактивни мисии (o.object_status_sid=2), които заради проверката в WHERE частта не излизат - естествено. А аз задължително искам всички потребители, т.е. тези, които имат мисии с object_status_sid=2 да излизат все едно нямат никакви мисии...но да излизат все пак.
И така...лесно мога да разкарам проверката от MySQL и да я правя в PHP, обаче това е кофти решение, при положение, че съм 80% сигурен, че има това query, което ми трябва.
Някакви идеи?Редактирано от Dakota на 09.05.03 18:26.
| |
Тема
|
Re: Въпрос за една MySQL заявка
[re: Dakota]
|
|
Автор |
Grent (непознат) |
Публикувано | 09.05.03 18:34 |
|
Ако имаш отношение в таблиците 1 към едно значи самата база е зле конструирана. Опитай да я промениш, като обединиш тези две таблици ( между които е отношението )
За каузътъ.
| |
Тема
|
offtopic
[re: Grent]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 09.05.03 18:38 |
|
Не е точно така...защото имам още 20 таблици, които си имат представяне в OBJECT_HISTORY...просто там има общи неща за всички обекти в базата ми.
| |
Тема
|
Re: Въпрос за една MySQL заявка
[re: Dakota]
|
|
Автор |
PhantomAS (няма) |
Публикувано | 10.05.03 11:06 |
|
На пръв поглед (без много много да мисля) ми се струва, че трябва да ползваш за втората част OUTER JOIN - нещо не ти е чиста логиката - защото ползваш полето o.object_history_sid=m.object_history_sid за връзка между двете таблици и едновременно с това о4акваш то да е празно. По начина по който си написал заявката ще ти дава само редовете в които имаш данни и в трите таблици - ще се пропуска винаги NULL -а.
---
Е т'ва е живот!
| |
Тема
|
Re: Въпрос за една MySQL заявка
[re: Dakota]
|
|
Автор | DNB (Нерегистриран) |
Публикувано | 10.05.03 14:49 |
|
Shto ne probvash neshto bez JOIN-ove? !
Mahnete gi tia typi reklami be!
| |
Тема
|
Re: Въпрос за една MySQL заявка
[re: PhantomAS]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 10.05.03 17:52 |
|
Не...NULL-овете излизат. Не излизат тези, за които object_staus_sid=2.
| |
Тема
|
Реших си проблема
[re: Dakota]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 10.05.03 18:56 |
|
Използвам temporary table, където запазвам MISSION и въпросното поле от OBJECT_HISTORY...по този начин наблъсках проверките в ON частта.
| |
|
|
|
|