1

我正在尝试从表中的列中获取不同值的列表。每列可以包含多个逗号分隔的值。我只想消除重复值并提出一个唯一值列表。

我知道如何使用 PHP 通过抓取整个表然后循环行并将唯一值放入唯一数组来执行此操作。

但是可以用 MySQL 查询来做同样的事情吗?

我的桌子看起来像这样:

| ID |                  VALUES                    |
---------------------------------------------------
| 1  |    Acadian,Dart,Monarch                    |
| 2  |    Cadillac,Dart,Lincoln,Uplander          |
| 3  |    Acadian,Freestar,Saturn                 |
| 4  |    Cadillac,Uplander                       |
| 5  |    Dart                                    |
| 6  |    Dart,Cadillac,Freestar,Lincoln,Uplander |

所以我的唯一值列表将包含:

  • 阿卡迪亚
  • 卡迪拉克
  • 自由之星
  • 林肯
  • 君主
  • 土星
  • 高地人

这可以通过单独的 MySQL 调用来完成,还是需要一些 PHP 排序?

谢谢

4

2 回答 2

1

为什么要将这样的数据存储在数据库中?首先,您故意取消了您想要使用数据库的所有广泛查询功能。相反,有一个这样的表:

| valueID | groupID |   name     |
----------------------------------
|    1    |    1    |  Acadian   |
|    2    |    1    |  Dart      |
|    3    |    1    |  Monarch   |
|    4    |    2    |  Cadillac  |
|    2    |    2    |  Dart      |

请注意与 Matthew 的建议相比的不同valueID之处。Dart那就是具有相同的值具有相同的 valueID(您可能希望稍后再参考这些,并且您不想再犯同样的错误,即不再提前考虑,是吗?)。然后让主键同时包含 valueID 和 groupID。

然后,要回答您的实际问题,您可以通过此查询检索所有不同的值:

SELECT name FROM mytable GROUP BY valueID

GROUP BY在这里应该比 a 表现更好,DISTINCT因为它不应该进行表扫描)

于 2012-12-25T11:43:42.693 回答
0

我建议选择(并拆分)到一个临时表中,然后对此进行调用。

首先,MySQL http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/中显然没有拆分功能(这已经三年了,所以如果这已经改变,有人可以评论吗?)

将所有内容推入临时表并从中选择。

如果可以将它们分解成具有这种结构的表,那就更好了:

| ID |                  VALUES                    |AttachedRecordID |
---------------------------------------------------------------------
| 1  |    Acadian                                 |        1        |
| 2  |    Dart                                    |        1        |
| 3  |    Monarch                                 |        1        |
| 4  |    Cadillac                                |        2        |
| 5  |    Dart                                    |        2        |

等等

于 2012-12-20T21:31:11.530 回答