4

这似乎是一个简单的问题,但我无法终生找到答案。无论值如何,如何选择列中的所有行?例如,如果我想要列位置中的所有内容:

"SELECT * FROM whateverTable WHERE id='$id' AND date='$date' AND location='I don't care, return everything'"

请记住,我需要在那里的位置,因为我正在获取对该数据库的动态 URL 查询,否则我会忽略它。

编辑 我已经阅读了一些答案,并为我没有让自己更清楚而感到羞耻。我正在尝试查看是否可以在不需要此操作的情况下选择可以选择列中每一行的 MySQL 查询:

if ($location == '') {
  "SELECT * FROM whateverTable WHERE id='$id' AND date='$date'"
} else {
  "SELECT * FROM whateverTable WHERE id='$id' AND date='$date' AND location='$location'"
}

而不是像那样破解我的代码(因为我的真实代码中有更多的查询子句),我试图看看这样的事情是否可能:

"SELECT * FROM whateverTable WHERE id='$id' AND date='$date' AND location='%'"

或这个:

"SELECT * FROM whateverTable WHERE id='$id' AND date='$date' AND location='.*'"

但我没有任何运气。如果不是,我会继续前进。抱歉没有让自己更清楚

4

5 回答 5

5

正如您在问题中所说,您应该动态构建查询并忽略该字段。然后查询将变为:

SELECT * FROM whateverTable
WHERE id = '$id'
AND date = '$date'

如果由于某种原因你不能这样做,你可以尝试这样的事情:

SELECT * FROM whateverTable
WHERE id = '$id'
AND date = '$date'
AND (location='$location' OR '$location' = '')

设置$location为空字符串将导致返回所有位置。

并且不要忘记正确转义字符串以避免 SQL 注入攻击。

于 2012-06-12T21:14:26.133 回答
1

SELECT location FROM whateverTable将返回位置列中的每一行/值。

如果要开始过滤结果,请添加 where 子句。

于 2012-06-12T21:14:14.790 回答
0

如果您正在动态构建查询,只需检查 location 是否为 null 或空字符串,然后省略查询的该部分。

于 2012-06-12T21:14:54.070 回答
0

替换等号:“=”为LIKE

SELECT * FROM whateverTable WHERE id='$id' AND date='$date' AND location LIKE '%'
于 2017-04-06T14:43:22.470 回答
0

我认为您正在寻找子查询?

SELECT * FROM whateverTable WHERE location IN (SELECT location FROM whateverTable);
于 2020-01-09T21:24:46.553 回答