Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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 尝试查找所有hastag count并在MYSQL数据库中插入一个数量_Php_Mysql_Count_Find - Fatal编程技术网

Php 尝试查找所有hastag count并在MYSQL数据库中插入一个数量

Php 尝试查找所有hastag count并在MYSQL数据库中插入一个数量,php,mysql,count,find,Php,Mysql,Count,Find,我使用PHP和MYSQL数据库 我有两张桌子,一张叫做discover_section,另一张叫做videos。 我想在discover_部分设置在视频中找到的相应hastag的数量 例如,在视频部分可以找到20次车前草标签的数量。现在我想在discover_部分列中设置该金额。然后转到在discover_部分测试中找到的下一个hastag,并查看在视频表中找到的次数等 我该怎么做 我的表格如下所示: 探索部分: 视频: 首先,我必须同意@MagnusEriksson。你应该规范化你的数据库。那

我使用PHP和MYSQL数据库

我有两张桌子,一张叫做discover_section,另一张叫做videos。 我想在discover_部分设置在视频中找到的相应hastag的数量

例如,在视频部分可以找到20次车前草标签的数量。现在我想在discover_部分列中设置该金额。然后转到在discover_部分测试中找到的下一个hastag,并查看在视频表中找到的次数等

我该怎么做

我的表格如下所示:

探索部分:

视频:


首先,我必须同意@MagnusEriksson。你应该规范化你的数据库。那么这将是非常简单和快速的。还要注意的是,我绝对不是SQL专家。我知道子查询不利于性能。因此,与其他解决方案相比,我的解决方案可能相当缓慢

其思想是通过比较字符串来检查video.description中是否包含hashtag。hashtag可以是该字段中的唯一字符串,也可以是起始字符串、结束字符串或中心字符串。所有hashtag都用空格分隔。该检查由四种不同的条件执行

下面的代码(也可在处执行)显示了如何选择hashtag计数

选择 探索部分。*, 选择 伯爵 从…起 视频 哪里 -只保存了一个标签 video.description,如TRIMdiscover\u section.section\u名称或 -搜索的hashtag是最后一个hashtag,分隔符是空格 video.description,如CONCAT%、discover\u section.section\u名称或 -搜索的hashtag是第一个hashtag,分隔符是空格 video.description,如CONCATdiscover\u section.section\u名称,%OR -搜索的标签是ceter标签之一,分隔符是空格 video.description,如CONCAT%,discover_section.section_name,% 作为金额 从…起 探索部分; 要将这四个条件合并为一个条件,可以使用正则表达式。这将执行与上面相同的检查。同样,这里也是交互式的:

选择 探索部分。*, 选择 伯爵 从…起 视频 哪里 video.description REGEXP CONCAT^ |\\s+,discover_section.section_name,\\s+|$ 作为金额 从…起 探索部分; 要将其更改为更新discover_部分,必须对代码进行如下修改,非regexp代码的修改方式相同:

使现代化 探索组 设定金额= 选择 伯爵 从…起 视频 哪里 video.description REGEXP CONCAT^ |\\s+,discover_section.section_name,\\s+|$ ;
请注意,hashtag有一些问题,例如!,等等这些角色!,在正则表达式中使用。但我猜hashtag只是字母数字。如果没有,您必须检查是否有转义功能。

将表DDL作为创建表提供,跳过不必要的列,将一些示例数据作为插入,显示此数据的所需输出并进行解释。您应该从数据库开始,而不是将多个值(如标记)存储在一列中。基本上,您有一个包含视频的表、一个包含所有标记的表和一个将视频链接到标记的多对多表。这将使您很容易获得所需的聚合数据。在一列中存储多个值是一种不好的做法,它会导致错误。让简单和基本的事情变得更难。我知道这会让事情变得更难,但我不能再改变它了。如果我改变表格的布局,我需要改变很多代码。。。在我的下一个项目中,我会让它更有条理,但现在我必须处理这个混乱:PIt不仅仅是让事情变得更困难,这样做也会影响性能,因为你无法以同样的方式利用索引。因为您似乎还在从事这个项目,所以我仍然建议您花点时间真正重构数据库。最后,你会感谢你自己做的。谢谢你,马格努斯,我会考虑这个选择。我不知道该怎么做,因为两者在我的应用程序中都有自己的功能。我也不想反复调用这个函数。也许一天一两次。。。如果hastag是否有趋势,此函数将通过找到的hastag数量进行排序。首先。。。让我告诉你。。。你太棒了D非常感谢您的回答和互动示例。我使用你的代码,就像你在这条消息下面看到的那样。我会一天打两三次电话,这样就不会太多东西了。再一次miile7。。。你是一个祝福!!谢谢@听上去真好。不客气:也许你可以点击我答案左上角的勾号,将这个问题标记为已解决。这边这边
UPDATE
    discover_section
SET amount =
    (
        SELECT 
            COUNT(id) 
        FROM 
            videos
        WHERE
                        -- only one hashtag saved
            videos.description LIKE TRIM(discover_section.section_name) OR 
            -- searched hashtag is the last hashtag, separator is space
            videos.description LIKE CONCAT("% ", discover_section.section_name) OR
            -- searched hashtag is the first hashtag, separator is space
            videos.description LIKE CONCAT(discover_section.section_name, " %") OR
            -- searched hashtag is one of the ceter hashtag, separator is space
            videos.description LIKE CONCAT("% ", discover_section.section_name, " %")
    );
不再显示为新的和未回答的问题。此外,我也因此获得了一些声誉: