【问题标题】:What could be the join query for the condition given below?下面给出的条件的连接查询可能是什么?
【发布时间】:2011-03-07 18:30:03
【问题描述】:

我有两个表 Orders 表和 customers 表,都有 customerid 作为公共字段,

客户表有名字、姓氏、电话和电子邮件地址字段。

现在如果我必须根据客户的名字和/或姓氏和/或电话和/或电子邮件和/或订单ID搜索/选择订单,那么连接查询的mysql格式应该是什么?

与上述相关的其他问题

我必须使用单个文本框来按订单 ID 或名字或姓氏或电话或电子邮件地址进行搜索,如果您有想法,我如何识别与必填字段相关的输入值让它发生请指导我...

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    类似这样的:

    select orders.* 
    from orders 
    join customers on customers.customerid=orders.customerid
    where customers.firstname = 'John' -- or whatever
    

    这为您提供了一个订单列表,但您可以根据客户表中的字段对其进行过滤(通过适当地更改 where 子句)。

    要解决第二个问题,您无法确定用户想要搜索哪个字段,因此您必须搜索所有可能的字段。像这样构建一个 where 子句:

    where (customers.firstname like '%input%')
       or (customers.lastname like '%input%')
       or (orders.id = 'input')
       or (.. etc)
    

    input 是在文本框中输入的内容。

    不过要小心清理输入字符串。如果可以,您应该使用参数,或者至少将' 替换为''

    您不希望用户能够输入 '; drop table customers; -- 并将其解释为 SQL 代码而不是字符串。

    【讨论】:

    • 嗯,这是给你的答案。这是显而易见的答案,所以我认为您可能有理由不使用它。
    • +1 Thanx Blorg 请查看更新后的问题以了解其他相关问题
    • 感谢您的博客,感谢您的时间
    【解决方案2】:
    SELECT * FROM orders JOIN customers ON customers.customer_id=orders.customer_id;
    

    【讨论】:

      【解决方案3】:
      SELECT * FROM customers AS c INNER JOIN order AS o ON c.customerid=o.customerid
      

      订购:

      SELECT * FROM customers AS c INNER JOIN order AS o ON c.customerid=o.customerid ORDER BY c.lastname DESC
      

      搜索:

      SELECT * FROM customers AS c INNER JOIN order AS o ON c.customerid=o.customerid WHERE c.lastname LIKE "%brown%"
      

      【讨论】:

        猜你喜欢
        • 2011-03-08
        • 1970-01-01
        • 2021-06-02
        • 2013-08-17
        • 2023-02-07
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        相关资源
        最近更新 更多