【问题标题】:how can i add condition in mysql query executed in another table?如何在另一个表中执行的 mysql 查询中添加条件?
【发布时间】:2013-09-10 12:40:08
【问题描述】:

我为电子书开发了一个网站,我在 authors 的数据库表和 publishers 的表中有.. 有时作者姓名也会添加到 publishers 表中出版商 现在我有他的名字作为作者和出版商..当我在网站上搜索他的名字时,它返回两次,因为我在作者表和出版商表中搜索然后合并两个查询

这是我的代码:-

function generate_results($keyword, $row = 0) {


        $result1 = $this->db->query("SELECT au_id,au_name,au_state,SUBSTR(au_info,1,190) AS au_info,au_img FROM d_author where (au_name LIKE '%$keyword%' or au_info LIKE '%$keyword%') and au_state = '1' limit $row,20");


        $result2 = $this->db->query("SELECT pub_id,pub_name,pub_state,SUBSTR(pub_info,1,190) AS pub_info,pub_img FROM d_publishing where (pub_name LIKE '%$keyword%' or pub_info LIKE '%$keyword%') and and pub_state = '1' limit $row,20");


        $results = array_merge($result1->result_array(), $result2->result_array());

        return $results;
    }  

现在我想将第二个查询修改为类似的内容: 从“发布者表”中选择所有发布者,其中发布者的名称类似于 $keyword 并且此 $keyword 在作者表中不存在.. 我的意思是如果作者中存在此名称,请不要在出版商中选择它 我怎样才能把这个意思翻译成 Mysql Query

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    首先,在继续开发您的电子书应用程序之前检查 sql-injections。看起来您的关键字没有被检查为安全参数。只是为了确定,你知道 csrf 和 xss 吗?如果没有,也请检查一下。这很重要。

    其次,您应该考虑进行数据库设计以避免重复值。查看“数据库规范化”以获取更多信息。似乎您可以制作另一个表来提取您的“联系信息”,例如姓名、状态、ID 等。这将使您的作者表和发布者表可以使用“contact_id”引用联系信息表。

    最后但并非最不重要的一点是,要回答您的问题,您通常可以使用“反连接”来解决此类问题。在第二个查询中对作者表使用左连接,并检查与发布者表匹配的“IS NULL”。更多信息在这里:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/

    我不知道我是否完全正确地理解了您的数据库设计,但似乎UNION 结合DISTINCT 可以帮助您-您甚至不需要这个array_merge-stuff。我建议您在 mysql 文档中查看这两个命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多