我有两个字符串,这在数据库中:
"01, 02, 03, 04, 05, 06"
这是我生成的PHP字符串:
"02, 03, 04, 06, 07, 08"
我想在我的数据库中检查哪些数字相同,以及数量是多少。
答案 0 :(得分: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);
答案 1 :(得分:0)
如果它作为字符串存储在数据库中,则无法在SQL查询中执行此操作。您最好的机会是编写自定义MySQL FUNCTION
或获取所有行并在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]}.";