0

これが私の実際のクエリです:

$result = mysqli_query($link,"select ids_billets from pref_tags where id='$_GET[id]'");
$tags_ids = $result->fetch_object();

$result = mysqli_query($link,"select id, html from pref_posts where id in ($tags_ids->ids_billets)");
while($posts = $result->fetch_object()) {
  .....
}

pref_tags テーブル (ids_billets) の 1 つの varchar フィールドに ID があります - 例: "12,16,158"

これを照会するより良い方法はありますか? ありがとう

4

2 に答える 2

1

カンマ区切りのリストを含む 1 つの行の代わりに、投稿をタグにリンクする新しいテーブルを作成し、投稿/タグの組み合わせごとに 1 つの行を作成します。

posts
---------------------
post_id | html | etc.


posts_tags
----------------
post_id | tag_id

tags
------------------------
tag_id | tag_name | etc.

次に、次のようにします。

SELECT p.post_id, p.html
FROM posts p
INNER JOIN posts_tags pt
ON p.post_id = pt.post_id
INNER JOIN tags t
ON pt.tag_id = t.tag_id
WHERE t.tag_name = ?

または、すでに持っている場合はtag_id、次のようになります。

SELECT p.post_id, p.html
FROM posts p
INNER JOIN posts_tags pt
ON p.post_id = pt.post_id
WHERE pt.tag_id = ?

サブクエリを使用して、別の形式で同じクエリを実行することもできます。

SELECT post_id, html
FROM posts
WHERE post_id IN (SELECT post_id FROM posts_tags WHERE tag_id = ?)

また、現在のコードで発生している深刻な SQL インジェクションの問題を簡単に回避できるようにする、準備済みステートメントも参照してください。

于 2013-08-15T17:36:49.480 に答える