簡単に言えば、pid を注文する必要はありません。
4行の「ランク」と呼ばれる追加のテーブルを作成する代わりに、同じ効果をもたらす仮想ランクをアタッチできるようにしたいと思います。私のランクは、私のタグに位置を与えるためのものです。ID ごとに 4 つのタグがあるため、これらのタグを列挙すると 1 ~ 4 の値になります。
これにより、同じ数字を何度も手動で入力する必要がなくなります。
私のテーブル:
people tags_rel tags ランク ID | 等ID | ピッド | tid | 削除 ID | タグ ID --+----- ---+------+-----+---- ---+-------- -- 2345 | 1 | 2345 | 2 | 1 1 | パン 1 2346 | 2 | 2345 | 3 | 2 2 | 水 2 2347 | 3 | 2345 | 1 | 3 3 | くま 3 4 | 2345 | 6 | 4 4 | 牛乳 4 ---+------+-----+---- 5 | ホットドッグ 5 | 2346 | 3 | 1 6 | 2346 | 4 | 2 7 | 2346 | 2 | 3 8 | 2346 | 5 | 4 ---+------+-----+---- 9 | 2347 | 6 | 1 10 | 2347 | 1 | 2 11 | 2347 | 4 | 3 12 | 2347 | 5 | 4 ---+------+-----+----
私のクエリ:
SELECT p.id as pid, t.tag as tname, tr.tid as trid, r.id as rank
FROM people AS p
RIGHT JOIN tags_rel AS tr ON tr.pid = p.id
LEFT JOIN tags AS t ON tr.tid = t.id
LEFT JOIN rank AS r ON tr.rid = r.id
MySQL の期待される結果:
> +--------+------------+--------+------+ > | ピッド | 名前 | トリッド | ランク | > +--------+------------+--------+------+ > | 2345 | 水 | 水 | 2 | 1 | > | 2345 | パン | 1 | 2 | > | 2345 | シリアル | 3 | 3 | > | 2345 | ミルク | 4 | 4 | > | 2346 | シリアル | 3 | 1 | > | 2346 | ミルク | 4 | 2 | > | 2346 | 水 | 水 | 2 | 3 | > | 2346 | ホットドッグ | 5 | 4 | > | 2347 | チョコレート | 6 | 1 | > | 2347 | パン | 1 | 2 | > | 2347 | パン | 4 | 3 | > | 2347 | パン | 5 | 4 | > +--------+------------+--------+------+
ランクをポジションとして使用しています。したがって、pid にアタッチされているタグはすべて、最初の位置で表示したいと思います。タグは pid ごとに異なるため、位置が異なります。rank=1 で tname=water を呼び出すと、すべての「water」タグが位置 1 のみに表示されます。
ありがとう!