Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP PDO SQlite单次查询,以查找仅出现一次的值,并以逗号分隔的值作为行_Php_Sqlite - Fatal编程技术网

PHP PDO SQlite单次查询,以查找仅出现一次的值,并以逗号分隔的值作为行

PHP PDO SQlite单次查询,以查找仅出现一次的值,并以逗号分隔的值作为行,php,sqlite,Php,Sqlite,例如,我有下表: id Name - Target 1 A B 2 C D,G 3 E D 4 F G,B 5 L M,D,B 6 Q G,N 我有一个超过200万条记录的数据库,我想我在一行中用逗号存储值时犯了一个错误。 我的目标是在“Target”行上查询整个数据库,以获得唯一的、不重复的值,在我的示例中,查询应该只返回“M”和“N”,因为“B

例如,我有下表:

 id  Name - Target 
 1    A       B     
 2    C       D,G      
 3    E       D
 4    F       G,B
 5    L       M,D,B
 6    Q       G,N
我有一个超过200万条记录的数据库,我想我在一行中用逗号存储值时犯了一个错误。 我的目标是在“Target”行上查询整个数据库,以获得唯一的、不重复的值,在我的示例中,查询应该只返回“M”和“N”,因为“B”、“D”和“G”是重复的


是否有一个查询行来完成此操作?

我同意您应该更改数据库架构

您的问题看起来像是重复的:

因此,如果您真的需要,您的方法可以是:


请注意,您需要在表的
target
列中将
numbers
表的值设置为从1到值的最大索引。

我同意您应该更改数据库架构

您的问题看起来像是重复的:

因此,如果您真的需要,您的方法可以是:


请注意,您需要在表的
target
列中将
numbers
表的值设置为从1到最大的值索引。

@草莓(关于“我认为我犯了错误?”:)谢谢。再次更正;-)@草莓,是不可能的吗?历史上从未发生过这样的事情?:)首先,规范化您的数据。我可以想象这样一种情况:我的“目标”是一个“注释”,查询将在整个数据库中搜索唯一的单词。“我想我犯了一个错误?”上的@草莓说:“没有一行是这样的,谢谢。”。再次更正;-)@草莓,是不可能的吗?历史上从未发生过这样的事情?:)首先,规范化您的数据。我可以想象这样一种情况:我的“目标”是一个“注释”,查询将在整个数据库中搜索唯一的单词。没有一个单行查询?谢谢你的努力。谢谢你的努力。
SELECT
  SUBSTRING_INDEX(SUBSTRING_INDEX(t1.Target, ',', numbers.n), ',', -1) letter
FROM
  numbers 
INNER JOIN t1
  ON CHAR_LENGTH(t1.Target)
     -CHAR_LENGTH(REPLACE(t1.Target, ',', ''))>=numbers.n-1
GROUP BY letter
HAVING COUNT(*)=1