mysql SQL查询比较整数和字符串

标签 mysql sql compare

我在将字符串与数据库中不同表的整数列进行比较时遇到问题。

有一个数据库,其中有两个表作为类别和内容。现在,每个内容文本可以属于多个类别,这些类别列在内容表的category_ids 列中,以逗号分隔。我知道这还没有标准化。但它已经在那里了。

类别表

id | name | timestamp
 1   aaa    something
 2   bbb    something
 3   ccc    something
 4   ddd    something
 5   eee    something

内容表

id | category_ids | content | timestamp
 1     1              xxx     something
 2     1,2,3,4        yyy     something
 3     1,2            zzz     something
 4     1,2,3          www     something

现在我必须显示类别列表以及每个类别中内容文本的数量。 表示其中使用该类别的内容文本的数量。注意(类别 eee 不存在于任何内容文本中,因此结果集中显示 0 计数。)

aaa(4)
bbb(3)
ccc(2)
ddd(1)
eee(0)

我尝试了很多方法来将类别表的 id 与内容表的category_ids 进行比较。但一个是整数,另一个是字符串。

我尝试的一种方法是强制转换函数,但失败了

SELECT C.id , C.Name, COUNT( * ) AS ContentCount FROM categories AS C LEFT JOIN content  AS Q ON (CAST(C.id AS CHAR) = (Q.category_ids))  GROUP BY C.Name

请不要告诉我更改数据库的方法。如果有任何关于如何编写一个查询来提供这种结果集的想法,我们将不胜感激。

最佳答案

数据库中的 CSV 是有史以来最糟糕的主意。
它将扼杀任何使用索引的机会。它没有标准化。速度很慢。
它会一次又一次地咬你。

SELECT C.id , C.Name, COUNT( * ) AS QuotesCount 
FROM categories AS C 
LEFT JOIN quotes  AS Q ON (FIND_IN_SET(c.id,Q.category_ids))
GROUP BY C.Name

参见:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

关于mysql SQL查询比较整数和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496160/

相关文章:

PHP 错误处理 - 重定向

sql - Mysqldump 命令出错

c++ - 如何在 C++ 中将类的实例与 char * 变量进行比较?

python - 比较列表和字典

Python 在嵌套列表中搜索以查找值并将值插入到新列表中

mysql - 非唯一列 mysql

mysql - 尝试使用 MySQL 创建同一表中另一列的季节至今平均值的列

sql - Rails Postgres : set all fields in a table to zero, 除了

Mysql递归查询-在错误的列中给出一些结果

java - DB2 错误 SQLCODE=-103,SQLSTATE=42604