【问题标题】:PHP and MySQL filter multiple tablesPHP 和 MySQL 过滤多个表
【发布时间】:2012-08-11 21:51:43
【问题描述】:

我有 3 张桌子:

用户

  • 身份证
  • 姓名

类别

  • 身份证
  • 姓名

帖子

  • 身份证
  • 标题
  • 内容
  • 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>

然后我通过 jQuery 将此值发布到将查询数据库的 .php 文件。

但为了使用我拥有的类别名称或用户名或帖子表之外的任何其他值过滤“帖子”,我在帖子表中复制了这些列。 目前我有这个查询:

$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>";
}

如何进行在其他表中搜索的查询,这样我就不必在帖子表中重复列?

【问题讨论】:

  • 我会使用 OR 而不是 AND... 并输入 SELECT id

标签: php jquery mysql


【解决方案1】:

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

【讨论】:

  • 是的,LEFT JOIN 现在还没有。谢谢!现在我正在努力命名我的表和列。你有这方面的任何文件吗?
  • 不完全是文档,只是练习我已经适应以避免问题 - 所有小写字母,字母数字,整数,下划线(而不是空格)没有 utf8。您帖子中的所有内容都很有意义。
【解决方案2】:

另外,我不确定我是否理解清楚,但您目前只是在搜索帖子表,应该加入用户和类别。

【讨论】:

    【解决方案3】:

    我已经使用类似这样的查询解决了这个问题:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多