-1

テーブルから選択した結果があります。

id  tag
1   hey
1   wow
2   cry
87   game
87   bmw
6   lady
7   wow

しかし、この結果は私がJOINで得たものです。私の完全なSQLクエリ:

SELECT sites.id, sites.host, sites.url, sites.password, sites.status, sites.pr, sites.tyc, sites.alexa, sites.lastcheck, sites.comment, tags.tagname, tags.tagid FROM sites
LEFT JOIN sites_tags ON sites_tags.shellid = sites.id 
LEFT JOIN tags ON sites_tags.tagid = tags.tagid

ページネーションには、クエリからの3つの実際のデータが必要です。

私のクエリ-LIMIT3の場合、取得したい

1   hey
1   wow
2   cry
87   game
87   bmw

だがしかし

 1   hey
 1   wow
 2   cry

たとえば、すべての結果を行ではなくIDで制限する必要があります。

英語が下手でごめんなさい。

4

2 に答える 2

2
SELECT 
    s.id, 
    s.host, 
    s.url, 
    s.password, 
    s.status, 
    s.pr, 
    s.tyc, 
    s.alexa, 
    s.lastcheck, 
    s.comment, 
    tags.tagname, 
    tags.tagid 
FROM (
    SELECT
        id, 
        host, 
        url, 
        password, 
        status, 
        pr, 
        tyc, 
        alexa, 
        lastcheck, 
        comment
    FROM sites
    LIMIT 3
) s
LEFT JOIN sites_tags ON sites_tags.shellid = s.id 
LEFT JOIN tags ON sites_tags.tagid = tags.tagid

これは、正確に 3 つのサイトに関連するタグが必要であることを前提としています。これにより、3 つのサイトのサイト情報が選択され、タグがあればそれも選択されます。

ただし、必要なものが正確に返されるわけではありません。1 つのクエリを実行して、すべてのフィールドを選択することをお勧めします。sites

SELECT
    id, 
    host, 
    url, 
    password, 
    status, 
    pr, 
    tyc, 
    alexa, 
    lastcheck, 
    comment
FROM sites
LIMIT 3

次に、これらのサイトのタグを取得するために次のことを行います。

SELECT 
    sites_tags.shellid AS id, 
    tags.tagname, 
    tags.tagid 
FROM sites_tags
INNER JOIN tags ON sites_tags.tagid = tags.tagid
WHERE sites_tags.shellid IN (..... your ids go here ......)
于 2012-04-17T12:05:25.537 に答える
1

(それidは を指していると思いますsites.id

次のように置き換えますFROM sites

FROM ( SELECT * 
       FROM sites 
       ORDER BY whatever 
       LIMIT 3
     ) AS sites
于 2012-04-17T12:05:04.383 に答える