-4

我有两个字符串,这在数据库中:

"01, 02, 03, 04, 05, 06"

这是我的 PHP 生成的字符串:

"02, 03, 04, 06, 07, 08"

我想在我的数据库中检查这些数字中哪些是相同的,以及有多少。

4

2 回答 2

1

您需要将字符串拉出到您的 php 中,在“,”上拆分(爆炸),然后执行 array_intersect 以获得相同的字符串,并使用 count() 来查找有多少

//php
$phpstring ="02, 03, 04, 06, 07, 08";

//fix the query
$row=mysql_fetch_array(mysql_query("SELECT mystring from mytable where something"));

$dbstring=$row['mystring'];

$dbarray=explode(', ' $dbstring);
$phparray=explode(', ',$phpstring);

$identicals=array_intersect($dbarray,$phparrray);

echo "there are ".count($identicals)." identical elements: ". implode(",",$identicals);
于 2013-10-30T20:39:42.873 回答
0

如果它作为字符串存储在数据库中,则无法在 SQL 查询中执行此操作。您最好的机会是编写自定义 MySQLFUNCTION或获取所有行并在您的 PHP 脚本中处理它们,但这两者都是一个相对糟糕的解决方案,因为涉及处理表中的每一行。它可能既耗费时间又耗费 CPU,特别是如果它是一张大桌子。

但是有解决这个问题的方法,你只需要在这个表中使用正确的结构。您需要的是一对多关系。例如,而不是具有这种结构:

| numbers
| "1, 2, 3, 4"
| "5, 6, 7, 8"

你会有这个:

| group | number 
| 1     | 1
| 1     | 2
| 1     | 3
| 1     | 4
| 2     | 5
| 2     | 6
| 2     | 7
| 2     | 8

然后你可以这样做:

$sql = "SELECT
            `group`,
             COUNT(*),
             GROUP_CONCAT(`number` SEPARATOR ', ')
        FROM
            `table`
        WHERE
           `number` IN (2, 3, 4, 6, 7, 8)
        GROUP BY
           `group`
        ORDER BY
           COUNT(*) DESC
        LIMIT 1";

$res = mysql_query($sql);
$row = mysql_fetch_row($res);

echo "The group with most matches is the group {$row[0]}
      with {$row[1]} hits. The matching numbers were {$row[2]}.";
于 2013-10-30T20:56:22.963 回答