我有3张桌子:
用户
类别
帖子
我正在使用jquery制作过滤器(如实时搜索)。包含多个字段的表单表示列出帖子的diferente列。
<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文件。
但是为了使用我拥有的类别名称或用户名或者posts表之外的任何其他值来过滤“posts”,我在posts表中重复了这些列。 目前我有这个问题:
$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表中复制列?
答案 0 :(得分:1)
使用SQL JOIN,它将连接内存中的表而不重复它们。 W3Schools有一个很好的例子 - Inner Join
答案 1 :(得分:0)
此外,我不确定我是否理解清楚,但您目前只是搜索帖子表,应该加入用户和类别。
答案 2 :(得分: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%'