【发布时间】:2019-12-24 17:36:17
【问题描述】:
问题已解决。但是,如果您有“更好”或其他方式来做到这一点,请随时添加评论!感谢大家阅读! :)
我正在尝试进行动态查询。除了一件事,一切都运行良好。我已经用 Google 搜索了好几天,但我不知道如何进行以下工作;
SELECT project.name, project.description, track.name, track.description
, SDG.position, SDG.title, SDG.description
, sprint_numbers.number, sprint_options.option
, resources.name, resources.description
, URLs.URL
FROM project INNER JOIN track ON project.track_id = track.id
INNER JOIN project_SDG ON project.id = project_SDG.project_id
INNER JOIN SDG ON project_SDG.SDG_id = SDG.id
INNER JOIN sprint ON sprint.project_id = project.id
INNER JOIN sprint_numbers ON sprint_numbers.id = sprint.sprint_number_id
INNER JOIN sprint_options ON sprint_options.id = sprint.sprint_option_id
INNER JOIN resources ON project.id = resources.project_id
INNER JOIN URLs ON URLs.id = resources.id
WHERE 1=1
AND MATCH (project.name) AGAINST (:name_project)
AND MATCH (project.description) AGAINST (:description_project)
AND SDG.id = :SDG_1
AND SDG.id = :SDG_2
查询执行但不返回任何内容。问题是 SDG.id 不能同时适用于 :SDG_1 和 :SDG_2。
使用 OR 运算符有效,但这并不能以我想要的方式返回。它必须“充当” AND 运算符。 (:SDG_1 & :SDG_2 是绑定到 SQL 语句参数的 PHP 变量的名称。)
查询应该过滤这两个值。给 :SDG_1 和 :SDG_2 的值必须都存在于 project_SDG 表的 SDG.id 列中。如果 :SDG_1 的值存在,但 :SDG_2 不存在,则查询不应返回任何内容。
我在 StackOverflow 上找到了这个,但它对我不起作用:SELECTING with multiple WHERE conditions on same column
希望有人能帮帮我。
编辑:最小的可重现示例
查询:
SELECT * FROM project
INNER JOIN project_SDG ON project.id = project_SDG.project_id
INNER JOIN SDG ON project_SDG.SDG_id = SDG.id
WHERE SDG.id = 1 AND SDG.id = 7 AND SDG.id = 14 AND SDG.id = 17
项目表
+------------------+---------------------------+------------+
| id name | description | track_id |
+------------------+---------------------------+------------+
| 1 project name | This is a description 2 | |
+------------------+---------------------------+------------+
可持续发展目标表
+-----+-----------+-------------+---------------------------------------------+
| id | position | title | description |
+-----+-----------+-------------+---------------------------------------------+
| 1 | 1 | SDG 1 to 17 | There're multiple SDGs ranging from 1 to 17 |
| 17 | 17 | SDG 1 to 17 | There're multiple SDGs ranging from 1 to 17 |
+-----+-----------+-------------+---------------------------------------------+
project.SDG(桥接表)
+------------+--------+
| project.id | SDG.id |
+------------+--------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
+------------+--------+
【问题讨论】:
-
stackoverflow.com/help/minimal-reproducible-example - 请发布您的表结构和记录。
-
正确。表行中的单个字段不能有多个值。通常这类问题需要类似“tableA rows that have tableB rows with each value provided”之类的问题,但这会导致在这种情况下应该为 SELECT 子句中的值使用哪个“B 行”的问题。跨度>
标签: php mysql sql where-clause