我有一张阿拉伯文字表。我想删除重复的行。鉴于阿拉伯语中的符号:
我的表: vocabulary
+----+----------+--------------------------------+
| id | word | mean |
--------------------------------------------------
| 1 | سِلام | xxx |
--------------------------------------------------
| 2 | سَلام | xxx |
--------------------------------------------------
| 3 | سلام | xxx |
--------------------------------------------------
| 4 | سلام | xxx |
+------------------------------------------------+
现在我想要这张桌子:
+----+----------+--------------------------------+
| id | word | mean |
--------------------------------------------------
| 1 | سِلام | xxx |
--------------------------------------------------
| 2 | سَلام | xxx |
--------------------------------------------------
| 3 | سلام | xxx |
+------------------------------------------------+
我该怎么做?!
我的尝试:
$result = mysql_query( "SELECT * FROM vocabulary where");
while($end = mysql_fetch_assoc($result)){
$word = $end["word"];
$mean = $end["mean"];
$id = $end["id"];
$result2 = mysql_query( "SELECT * FROM vocabulary where word='$word' AND mean='$mean'");
$TotalResults = mysql_num_rows($result2);
if($TotalResults>1){
mysql_query( "DELETE FROM vocabulary WHERE id='$id'");
}
摘要:如何将MySQL敏感地识别为阿拉伯语符号?
答案 0 :(得分:1)
有多种方法可以实现这一目标。
1-您可以从数据库中选择行,循环遍历它们并将“word”标题保存在数组中,并且在循环的每次迭代中,您可以检查类似的值是否为in_array()
。如果值存在,则可以将id保存在另一个数组中,然后使用这些id从数据库中删除。
2-提取ID的另一种方法是使用类似下面的查询:
select count(*), id from table group by title
然后,您可以遍历结果并删除计数大于1的行(使用ID)。
两种(和其他方法)的基本概念是你必须匹配字符串。字母上的语音更改实际字符串,因此“سلام”不等于“سلام”。
另一方面,有一个很棒的阿拉伯语PHP库可用于各种阿拉伯语相关的字符串操作:PHP and Arabic Language。
这种方式只会删除一个副本。
还有其他几种方法可以做到这一点,这一切都取决于你拥有的数据集的大小,如果删除这些重复项是一次性事情或频繁的事情,因为你必须记住性能。< / p>
答案 1 :(得分:1)
我还没有对它进行测试,但这应该可行:
CREATE TEMPORARY TABLE tmp_keeps
SELECT title, MIN(id) AS keepID
FROM theTable
GROUP BY title
;
DELETE FROM theTable
WHERE (title, id) NOT IN (
SELECT title, keepID
FROM tmp_keeps
)
;
DROP TEMPORARY TABLE tmp_keeps;
它(在子查询中)获取每个标题的第一个id,然后删除不符合该条件的行。
编辑:修改以避免在评论中指出SQL错误。
如果它是一张大桌子,那么Adon的回答可能会更快。