如何在MySQL列中选择所有行

5

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

"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='.*'"

但是我没有任何运气。如果不行,我就会继续前进。对于没有让自己更清晰的解释,我很抱歉。

WHERE子句不必引用每个列。 - DGH
1
你最好完全避免这种方法,而是添加另一种检索数据的方法。 - JustinDanielson
5个回答

6

根据你在问题中提到的,你应该动态构建查询语句并忽略那个字段。查询语句应该如下:

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注入攻击。


从逻辑上讲,我认为将位置设置为''会返回每一行,但出于某种原因它没有返回任何行。 - John Bowlinger
1
@JohnBowlinger:你需要添加OR '$location' = ''。没有这部分,它只会匹配位置为空字符串的行,这不是你想要的。 - Mark Byers
我在我的工作台上尝试了这个,但没有成功。美元符号到底是用来做什么的? - haneulkim

1

SELECT location FROM whateverTable 会返回 location 列中的每一行/值。

如果您想开始筛选结果,请添加 where 子句。


为了调试目的,我使用 mysqli_fetsh_array(mysqli_query('SELECT location FROM whateverTable')) ,然后使用 foreach 显示所有结果,但这只给我列中的第一条记录! - user3423014

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

0

我想你是在寻找一个子查询?

SELECT * FROM whateverTable WHERE location IN (SELECT location FROM whateverTable);

0

将等号符号“=”替换为LIKE

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接