Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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/mysql的问题_Php_Mysql_Csv_Sql Like - Fatal编程技术网

逗号分隔值和类似php/mysql的问题

逗号分隔值和类似php/mysql的问题,php,mysql,csv,sql-like,Php,Mysql,Csv,Sql Like,设置 这或多或少是我之前发布的关于逗号分隔值(爆炸、内爆)的后续问题。这是过去几天一直困扰我的一个场景,因为我是一个笨蛋——很抱歉,这篇文章太长了 我通过url(index.php?id=variable)传递一个变量,然后使用 SELECT * FROM table WHERE column LIKE '%$variable%' 我使用通配符是因为结果是一个逗号分隔的值,变量在数据库中多次出现 因此,如果我们将学校分配给流行的电视节目,我的数据库是这样设置的,用户可以将多个学校分配给电视节

设置 这或多或少是我之前发布的关于逗号分隔值(爆炸、内爆)的后续问题。这是过去几天一直困扰我的一个场景,因为我是一个笨蛋——很抱歉,这篇文章太长了

我通过url(index.php?id=variable)传递一个变量,然后使用

SELECT * FROM table WHERE column LIKE '%$variable%' 
我使用通配符是因为结果是一个逗号分隔的值,变量在数据库中多次出现

因此,如果我们将学校分配给流行的电视节目,我的数据库是这样设置的,用户可以将多个学校分配给电视节目。即

南方公园-->fsunyumit

阿彻-->哈佛纽约大学

Index.php?id=nyu将显示Sourth Park&Archer

问题 因为我使用的是像“%variable%”一样的

如果我有以下资料: 南方公园-->uark 阿切尔-->ua

index.php?=ua 除了弓箭手表演,南方公园也将表演


由于使用了通配符,这是有意义的……但是有人能想出一种方法来实现我想要的结果吗?。有没有任何方法可以使用逗号分隔的值来实现更精确的结果?。我完全被踩死了,希望得到任何帮助。

更好的方法是创建另外两个表。 一个表是您已经有“电视节目”的表,第二个表是“标签”表,第三个表是连接表

以下是一个示例:

 CREATE TABLE tags(id INT, tag VARCHAR(200));
 CREATE TABLE tv_tags(show_id INT, tag_id INT);

 SELECT FROM tv_shows,tv_tags WHERE tv_shows.id=tv_tags.show_id AND tag_id IN (SELECT id FROM tags WHERE tag LIKE 'tag');

更好的选择是创建另外两个表。 一个表是您已经有“电视节目”的表,第二个表是“标签”表,第三个表是连接表

以下是一个示例:

 CREATE TABLE tags(id INT, tag VARCHAR(200));
 CREATE TABLE tv_tags(show_id INT, tag_id INT);

 SELECT FROM tv_shows,tv_tags WHERE tv_shows.id=tv_tags.show_id AND tag_id IN (SELECT id FROM tags WHERE tag LIKE 'tag');

你试过REGEXP操作符了吗?类似

SELECT * FROM table WHERE column REGEXP('(^|,)%variable%(,|$)')  

如果标记之间有空格,则可能会略有不同,但这里的想法是

您尝试过REGEXP操作符吗?类似

SELECT * FROM table WHERE column REGEXP('(^|,)%variable%(,|$)')  

如果标签之间有空格,可能会略有不同,但这里的想法是

我认为这不是使用数据库的最佳方式。如果您已经建立了适当的关系,而不仅仅是使用表作为存储,那么这是一个需要解决的小问题。我认为这不是使用数据库的最佳方式。如果您设置了正确的关系,而不仅仅是将表用作存储,那么这是一个需要解决的小问题。非常感谢,这使我走上了正确的道路。.我使用了如下内容结束:REGEXP'[[:]]'非常感谢,这使我走上了正确的道路。.我使用了如下内容结束:REGEXP'[[:]]'