SQL вопрос. Нужно запросить 3 таблицы за один раз! - PullRequest
1 голос
/ 03 мая 2010

У меня есть база данных sql. В этой базе данных 3 таблицы, которые мне нужно запросить. В первой таблице содержится вся информация об элементе с именем item, а в двух других таблицах содержатся данные для голосов и комментарии с именем userComment, а в третьей таблице для голосований - userItem

В настоящее время у меня есть функция, которая использует этот SQL-запрос для получения последних более популярных (с точки зрения как голосов, так и комментариев):

* +1007 *

Я знаю, как изменить это либо только голосами, либо комментариями ....

ОДНАКО - мне нужно запросить базу данных, чтобы вернуть только itemID из тех, которые имеют конкретные условия только в таблице item, это WHERE categoryID = 'xx' AND typeID = 'xx'

Если sql ниндзя может помочь мне в этом? Нужно ли мне сначала возвращать результаты из вышеупомянутого запроса и для каждого в выбранном массиве, а затем сверять каждый с таблицей item и проверять, соответствует ли оно условиям для создания нового массива или это перебор?

Спасибо, Stefan

Ответы [ 2 ]

0 голосов
/ 03 мая 2010

Я бы хотел включить фильтр в каждый запрос. Мне нужно будет проверить, но я думаю, что это будет работать лучше, поскольку в Group By анализируется меньше строк. Таким образом, я бы сделал что-то вроде (это предположение, так как нам не сказано, как таблица item связана с другими):

$sql = "Select  itemID, Count(*) AS cnt
From    (
        Select ui.`itemID`
        From `userItem` ui
            Join `item` i
                On i.itemid = ui.itemid
        Where From_UnixTime( `time` ) >= Now() - Interval 1 Day
            And i.categoryID = 'xx'
            And i.typeid = 'xx'
        Union All
        Select uc.`itemID`
        From `userComment` uc
            Join `item` i
                On i.itemid= uc.itemid
        Where From_UnixTime( `time` ) >= Now() - Interval 1 Day
            And uc.itemID > 0
            And i.categoryID = 'xx'
            And i.typeid = 'xx'
        )  q
Group By `itemID`
Order By cnt Desc";
0 голосов
/ 03 мая 2010

Мне не совсем ясно, как настроена ваша БД или где находятся некоторые из этих атрибутов, но это может быть что-то вроде:

$sql = "SELECT  q.itemID, COUNT(*) AS cnt
FROM    (
        SELECT  `itemID`
        FROM   `userItem`
        WHERE  FROM_UNIXTIME( `time` ) >= NOW() - INTERVAL 1 DAY
        UNION ALL
        SELECT  `itemID`
        FROM    `userComment`
        WHERE  FROM_UNIXTIME( `time` ) >= NOW() - INTERVAL 1 DAY AND `itemID` > 0
        ) q inner join item i on q.itemID = i.itemID
WHERE i.categoryID = 'xx' AND i.typeID = 'xx'
GROUP BY
        q.`itemID`
ORDER BY
        cnt DESC";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...