【问题标题】:MySQL select query in where clause where two conditions need to be metMySQL select查询where子句中需要满足两个条件的地方
【发布时间】:2015-03-29 11:39:25
【问题描述】:

当我决定解决这个问题时,它看起来很简单,但事实证明它非常困难。它涉及根据访问者从下拉列表中选择的内容显示“范围”的详细信息。

下拉列表包含 V01 N01、V01 N02 等选项。 V=体积,N=数量。每卷有 20 个数字,共有 50 卷。所以搜索下拉列表将包含 V01 N01-V01 N20、V02 N01-V02 N20 等等直到 V50 N20。

如果访问者想要显示 V08 N10 和 V12 N23 之间的所有书籍,我想显示从 V08 N10 到 V12 N23 的所有书籍。我的代码删除了选择,以便 MySQL 将收到 VolumeNo = 8 和 IssueNo = 10。

但是,我想不出一个 SELECT 语句可以做我想做的事情。这是(简洁版):

SELECT * FROM tablename WHERE (VolumeNo >= 8 and IssueNo >= 10) and (VolumeNo

这显然行不通,但我希望你能明白我在这里要完成的工作的要点。我很感激提供的任何指导。谢谢。

【问题讨论】:

  • 如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
  • (真的是-1?)看来我最初的问题还不够清楚。即使我的“期望结果”是提供的“要点”代码。 DDL 很大,所以这里有一个 DDL 描述:V01 N01 V01 N02 V01 N03 | | V01 N20 V02 N01 V02 N02 | | V02 N20 V03 N01 一直到 V50 N20。因此,如果访问者想要展示从 V08 N10 到 V50 N20 的所有书籍,那么书籍的展示应该是:V08 N10、V08 N11 到 V08 N20、V09 N01、V09 N02 到 V09 N20、到 V50 N20建议不起作用,因为会显示 V01 N01 等书籍和许多其他不需要的书籍。
  • 我相信您可以提供少至 8 行的代表性数据集

标签: php mysql select where


【解决方案1】:

您需要使用OR 而不是And 来满足这两种条件

SELECT * FROM tablename WHERE (VolumeNo >= 8 and IssueNo >= 10) OR (VolumeNo <= 12 and IssueNo <= 23)

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 2012-01-26
    • 2012-04-22
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多