sql deyimi soru.

2 Cevap php

Hey there, I have an sql database. In this database is 3 tables I need to query. The first table has all the item info called item and the other two tables has data for votes and comments called userComment and the third for votes called userItem

Şu anda (oy ve yorum açısından da) son daha popüler almak için bu sql sorgu kullanan bir işlevi vardır:

$sql = "SELECT  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
GROUP BY
        `itemID`
ORDER BY
        cnt DESC";

Ben oyların tek başına ya da yorum yoluyla bu değiştirmek için biliyorum ....

ANCAK - Ben sadece geri dönmek için veritabanını sorgulamak için gereken sadece item tabloda belirli koşullara sahip olanlar itemID adlı bu vardır WHERE categoryID = 'xx' AND typeID = 'xx'

Sql ninja Bu konuda bana yardım edin ne olur? Ben ilk Yukarıdaki sorgu ve sonuçlarını döndürmek zorunda dizideki her zaman item tabloya karşı her kontrol ve yeni bir dizi oluşturmak için şartları uygun olup olmadığını görmek - getirilen bu overkill ya da ?

Thanks, Stefan

2 Cevap

Bu DB kurulum veya bu niteliklerin bazıları ancak burada böyle bir şey olabilir tam olarak nasıl benim için açık değil:

$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";

Ben sorguların her filtreyi eklemek için eğimli olacak. Ben doğrulamak gerekir ama az satır Grubu By analiz gibi daha iyi performans düşünürdüm. Böylece, (bu biz item tablo başkalarına nasıl ilişkili söylemedim çünkü bir tahmin) gibi bir şey yapardı:

$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";