Проблемка в запросе из двух табличек

tolst

Новичок
Проблемка в запросе из двух табличек

SELECT
I.id AS `id`,
I.datepost AS `datepost`,
I.title AS `title`,
U.login AS `author`

FROM
`items` I,
`userlist` U

WHERE
I.catid = '2'
AND
I.userid = U.id

GROUP BY
I.id
это пример запроса...
Проблема следующая: во WHERE есть следующее I.userid = U.id, так вот, если в табличке userlist (U) нет записи с искомым ID, то в основном SELECT запись тоже не появляется, в принципе это логично. Как обойти? чтоб вместо этого он писал что то типо 0...

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

tolst

Новичок
А примерчик можно побыстрому? пожааалуеста...
в мане капаться сейчас долго, сроки жмут ужастно =(

-~{}~ 28.08.06 00:09:

Перебаро лень и пошол в мануал =) вылечелось быстрее чем думал, спасибо большое, LEFT JOIN вылечил
 

tolst

Новичок
я в затруднении =) вернее в растерянности...
на страничке было 67 запросов, сократил их до 5 запросов вот таким SQLом:

SELECT
_system_services_items.*,
_system_account_userlist.login AS `author`,
COUNT(_system_services_comments.id) AS `all_comments`,
SUM(_system_services_comments.status) AS `all_comments_plus`,
1

FROM
`_system_services_items`

LEFT JOIN
_system_account_userlist ON
_system_services_items.userid = _system_account_userlist.id

LEFT JOIN _system_services_comments ON
_system_services_comments.itemid = _system_services_items.id

WHERE
catid = '2' AND pickedstart <> 0

GROUP BY
_system_services_items.id



UNION



SELECT
_system_services_items.*,
_system_account_userlist.login AS `author`,
COUNT(_system_services_comments.id) AS `all_comments`,
SUM(_system_services_comments.status) AS `all_comments_plus`,
2

FROM
`_system_services_items`

LEFT JOIN
_system_account_userlist ON
_system_services_items.userid = _system_account_userlist.id

LEFT JOIN _system_services_comments ON
_system_services_comments.itemid = _system_services_items.id

WHERE
catid = '2' AND pickedstart = 0

GROUP BY
_system_services_items.id

ORDER BY `1` ASC , `pickedstart` ASC , `datepost` DESC



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

-~{}~ 28.08.06 00:40:

путем тестов определил, что по времени генерации страницы разници обсалютно никакой...

какой вариант посоветуете оставить? где много запросов и они простые или этот запрос...?

сейчас тест идет на малом количестве записей, как разница будет выявляться при больших обьемах информации?
 

alpine

Новичок
tolst
Сделайте таблицы с предполагаемым большим количеством записей и проверьте, заодно посмотрите EXPLAINE.
 

tolst

Новичок
Давно хотел узнать по этому как раз таки поводу, есть ли готовые тулсы для генерирования большого количества записей? тоесть просто напросто тулс более менее универсальная которая делает кучу инсертов на заданные таблички... самому писать влом чета, наверняка готовые есть...

-~{}~ 28.08.06 02:17:

кстати, вылив все это дело на сервак под ос Free BSD там разница в производительности реально есть.. в среднем на 0.1 секунды с большим запросом скрипт выигрывает в скорости генерирования страницы.

опять же блин не известно как себя это проявит при количествах записей более 1к хотябы, сейчас тест на 100 записях идет.
 
Сверху