2

私は3つのテーブルを持っています:

ユーザー

  • ID
  • 名前

カテゴリー

  • ID
  • 名前

投稿

  • ID
  • 題名
  • コンテンツ
  • ユーザーID
  • カテゴリ ID

jqueryでフィルター(ライブ検索など)を作っています。複数のフィールドを持つフォームは、投稿を一覧表示するためのさまざまな列を表します。

<form onkeyup="filter()">

<input name="post_id" />
<input name="post_title" />
<input name="post_content" />
<input name="user_name" />
<input name="category_name" />

//order by column
<select name="col">
    <option value="post_id">post_id</option>
    <option value="post_title">post_title</option>
    <option value="post_content">post_content</option>
    <option value="user_name">user_name</option>
    <option value="category_name">category_name</option>
</select>

//direction
<select name="dir">
    <option value="DESC">DESC</option>
    <option value="ASC">ASC</option>
</select>

//limit number of results
<input name="lim"/>

</form>

この値を jQuery を介して .php ファイルに POST し、データベースにクエリを実行します。

しかし、私が持っているカテゴリ名またはユーザー名、または投稿テーブル以外の値で「投稿」をフィルタリングするために、これらの列を投稿テーブルに複製しました。現在、私はこのクエリを持っています:

$query = mysql_query("
SELECT *
FROM posts
WHERE id LIKE '%$id%'
AND title LIKE '%$title%'
AND content LIKE '%$content%'
AND user_id LIKE '%$user_id%'
AND user_name LIKE '%$user_name%'
AND category_id LIKE '%$category_id%'
AND category_name LIKE '%$category_name%'
ORDER BY $col $dir
$_lim
") or die (mysql_error());

次のような行を返すよりも:

while($post = mysql_fetch_assoc($query))
{
echo "<tr>";
echo    "<td>" . $post['id'] . "</td>";
echo    "<td>" . $post['title'] . "</td>";
echo    "<td>" . $post['content'] . "</td>";
echo    "<td>" . $post['category_name'] . "</td>";
echo    "<td>" . $post['user_name'] . "</td>";
echo "</tr>";
}

posts テーブルで列を複製する必要がないように、他のテーブル内を検索するクエリを作成するにはどうすればよいですか?

4

3 に答える 3

3

そのためにSQL JOINを使用すると、テーブルを複製せずにメモリ内で結合します。W3Schools には良い例があります -内部結合

于 2012-08-11T21:54:26.403 に答える
0

私は次のようなクエリを使用してそれを理解しました:

SELECT posts.id, posts.title, posts.content, users.name, categories.name
FROM posts
LEFT JOIN users
ON posts.users_id = users.id
LEFT JOIN categories
ON posts.category_id = categories.id
WHERE posts.id LIKE '%$id%' OR
WHERE posts.title LIKE '%$title%' OR
WHERE posts.content LIKE '%$content%' OR
WHERE users.name LIKE '%$user_name%' OR
WHERE categories.name LIKE '%$category_name%'
于 2012-08-12T20:12:54.740 に答える
0

また、明確に理解しているかどうかはわかりませんが、現在、投稿テーブルに対して検索しているだけで、ユーザーとカテゴリが結合されている必要があります。

于 2012-08-11T22:01:32.757 に答える