понедельник, 28 мая 2007 г.

Сага о mysql

Возможно, это станет хорошей привычкой. Но пока просто один пост про мои приключения с mysql.

Есть табличка вида:

fund

+-------+------+------------+-----------+
| id_good | sum | id_manager | id_client |
+-------+------+------------+-----------+

id_good, id_manager, id_client - foreign_keys таблиц goods, managers & clients соотвественно.
Таблица отражает информацию о том, какой товар зарезервирован(id_good), в каком количестве(sum) и для кого - для какого-то манагера(id_manager) или для какого-то клиента(id_client).
Причем обычно, товар резервируется либо под клиента, либо под манагера. В таких случаях, одно из этих полей будет равно 0. И если делать запрос типа select из этой таблички для просмотра информации о товаре, который мы отложили, в каком количестве и для кого, то он будет иметь примерно такой вид:

select * from fund where id_manager=managers.id_manager and fund.id_client=clients.id_client;

В таком случае вся табличка выведена не будет, ибо в ней будут записи, в которых, к примеру id_manager=0, а id_client=10, тогда связка через id_manager не сработает и эта строка не выведется, что меня вообще не устраивает.

Вобщем, после долгих мучений и раздумий, я обратился за советом к моему хорошему знакомому, он подсказал решение данной проблемы.
Запрос должен выглядеть так:

SELECT * FROM fund
LEFT JOIN managers ON fund.id_manager = managers.id_manager
LEFT JOIN clients ON clients.id_client = fund.id_client

Может кому пригодится... Или мне, через лет так дцать :)





Комментариев нет: