在mysql中创建一个可选的Where子句

时间:2014-08-08 16:42:32

标签: html mysql sql phpmyadmin

这里是fiddle example

有谁能告诉我如何在本声明中制作可选的Where子句?

SELECT u.user_id,u.name,.u.shipping_countries,
       u.contact,s.toy_id,s.price
FROM User u 
LEFT JOIN Sales_info s ON u.user_id = s.user_id
LEFT JOIN Toy t ON s.toy_id = t.toy_id
WHERE u.name = 'John' 
( ???AND s.toy_id = '222' ???)

我的预期输出应为:

USER_ID NAME    SHIPPING_COUNTRIES  CONTACT TOY_ID  PRICE
3        John   Europe              gmail   222     (null)

CASE可能有效吗?我试过了Case When s.toy_id = '222' ELSE 1=1 END,但显然这不正确。

背景:

我有一个html表单,允许卖家在每个产品页面上提交价格,如果他们也在销售他们正在浏览的产品。

表单是通过Ajax动态引入的。我想首先尝试从卖家表中检索一些基本信息(如果有的话),以填写尽可能多的输入表单。例如,如果他们已经填写了发货国家等基本信息并在其他页面上联系,那么这些详细信息将是输入表单中的玩具B页面上的默认值。

  <form>
    <input type='hidden' value='222' name='toy_id'/>
    <input type='text' value='Tom' name='user_name'/>
    <input type='text' value='' name='product_page_url'/>
    <input type='text' value='' name='price'/>
    <input type='text' value='Europe,Asia' name='shipping_countries'/>
    <input type='text' value='my@gmail.com' name='contact'/>
    <input type='submit'>
   </form>

如果他们已经提交了玩具B的价格,表格将显示他们之前输入的所有值,以便他们可以修改/更新它们。

1 个答案:

答案 0 :(得分:1)

如果您总是希望匹配单个玩具ID,但只有当用户销售该玩具时,您才能加入该玩具的子选择:

SELECT u.user_id,u.name,.u.shipping_countries,
       u.contact,s.toy_id,s.price
FROM User u 
LEFT JOIN (select * from Sales_info where toy_id = 222) s ON u.user_id = s.user_id
LEFT JOIN Toy t ON s.toy_id = t.toy_id
WHERE u.name = 'John'

这样,如果该玩具的用户与所选用户不匹配,则左联接仍然会从用户表中提供信息。

请注意确保这对大型数据库的有效性,因为我们无法在连接中使用索引。但是如果我们总是从dales_info中选择一行,那么我希望它不会太糟糕。它起码至少。