2012-08-11 104 views
1

我有3个表:PHP和MySQL过滤多个表

用户

  • ID

类别

  • ID

帖子

  • ID
  • 标题
  • 内容
  • USER_ID
  • CATEGORY_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> 

比我POST这个值通过jQuery到.php文件,将查询数据库。

但为了筛选“职位”的类别名称或用户名我有或任何其他值的职位表我已经在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>"; 
} 

如何使一个查询,其他表内搜索,这样我就不必重复列帖子表?

+0

我会使用或者替代和... 并把'选择id'。 – 2012-08-11 22:14:38

回答

1

使用SQL JOIN,它会将内存中的表连接起来而不会重复它们。 W3Schools有一个很好的例子 - Inner Join

+0

[W3Schools与W3C无关!](http://w3fools.com) – Gumbo 2012-08-12 13:22:28

+0

嗯,这很尴尬。 – 2012-08-12 13:24:29

+0

是的,LEFT JOIN现在不做。谢谢! 现在我正在努力命名我的表和列。你有什么文件吗? – 2012-08-12 20:14:51

0

此外,我不知道如果我理解清楚,但你目前只是在搜索帖子表,应该加入用户和类别。

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%'