Mysql 不同的和有黏结的在一起

Mysql 不同的和有黏结的在一起,mysql,Mysql,我需要为网站创建独特的SEOwords,方法是在distinct单词中添加-to。 我试着询问 UPDATE url_alias SET `keyword = (SELECT DISTINCT CONCAT( keyword, '-' )); 但是这个查询将-添加到所有单词中。这个查询有什么问题 示例:单词是Acer,Acer,Acer-,Apple,Apple,Apple-最后应该是Acer,Acer-,Acer-,Apple,Apple-,Apple-- 表中的示例。试试这个 UPDATE

我需要为网站创建独特的
SEO
words,方法是在
distinct
单词中添加-to。 我试着询问

UPDATE url_alias SET `keyword = (SELECT DISTINCT CONCAT( keyword, '-' ));
但是这个查询将
-
添加到所有单词中。这个查询有什么问题

示例:单词是Acer,Acer,Acer-,Apple,Apple,Apple-最后应该是Acer,Acer-,Acer-,Apple,Apple-,Apple--

表中的示例。

试试这个

UPDATE url_alias U1 SET keyword = 
(SELECT CONCAT( keyword, '-' ) from url_alias group by keyword) U2 
where U2.id=U1.id;
尝试:

CREATE TEMPORARY TABLE TSEL SELECT keyword FROM url_alias GROUP BY keyword HAVING COUNT(keyword) = 1;
UPDATE url_alias SET keyword = CONCAT( keyword, '-' ) WHERE keyword IN (SELECT keyword  FROM TSEL);
这是:

  • 创建一个包含所有唯一关键字的临时表:也就是说,它们不会在不同的行中重复
  • 更新TSEL中包含的那些关键字
  • 会话完成后,TSEL将自动删除。但是,您可以使用以下方法明确删除它:

    DROP TABLE TSEL;
    
    编辑 如果要忽略大小写以及已插入的“-”字符,则必须在计算要更新的候选字符时规范化关键字。在这种情况下,您的新SQL应该是:

    CREATE TEMPORARY TABLE TSEL SELECT UCASE(TRIM( BOTH '-' FROM keyword)) AS keyword FROM url_alias GROUP BY UCASE(TRIM( BOTH '-' FROM keyword)) HAVING COUNT(1) = 1;
    UPDATE url_alias SET keyword = CONCAT( keyword, '-' ) WHERE UCASE(TRIM( BOTH '-' FROM keyword)) IN (SELECT keyword FROM TSEL);
    
    如果你认为“宏碁”和“宏碁”是不同的:

    CREATE TABLE TSEL SELECT UCASE(keyword) AS keyword FROM url_alias GROUP BY   UCASE(keyword) HAVING COUNT(1) = 1;
    UPDATE url_alias SET keyword = CONCAT( keyword, '-' ) WHERE UCASE(keyword) IN (SELECT keyword FROM TSEL);
    
    我需要创建独特的搜索引擎优化的网站词添加-到不同的 话

    但是这个查询在所有单词中添加了-。这个查询有什么问题

    您可以使用
    WHERE
    条件来过滤和设置特定事件的值

    示例

    UPDATE url_alias SET keyword = CONCAT( keyword, '-' )
    where keyword = ?
    

    根据需要更改where条件以匹配某个事件并执行。

    什么是表结构?当您编写“添加-到不同的单词”时,您的意思是您只想更新那些唯一的关键字吗?@Pablo-Francisco-pérez Hidalgo我有一些单词重复,甚至有些单词重复了4次。比如说宏基,宏基,宏基,宏基。我需要它们是Acer,Acer-,Acer-,Acer-。@androza然后试试我的答案,应该是这样的work@xdazz表url\u别名,列为url\u别名\u id、查询、关键字。查询是网页的链接,关键字是seo word.Tnx!但这也增加了——在所有单词中,我有一些单词是复制的,比如宏碁和宏碁,但我只需要一个是宏碁和其他宏碁——这就是为什么我必须使用distinct.Tnx!但是我有大约6500个单词,我不知道有多少是相同的,而且单词每天都在变化但是,您需要一个where条件来限制对特定单词的更新。如果你能对
    where
    子句提出一些条件,有人可以给你一个可能的解决方案。Tnx!我要试试看!不幸的是它不起作用。如果有Acer,Acer,Acer,那么它会添加到一个Acer,如果我再次运行查询,那么它会以某种方式添加到Acer,所以它将是Acer,而不是另一个Acer。@androza这些“Acer”、“Acer”、“Acer”字符串是否完全相等,或者关键字字段是否至少有一个字符不同?您可以编辑您的问题以粘贴这些行吗?不管怎样,试试我在我的电脑里做的改变吧answer@androza请记住在更新之前重新生成TSEL。宏碁、宏碁、宏碁和宏碁-都在列中,因此一个区别是此宏碁-。我看到您的查询只在那些只有一个值的值上添加了。因此,当我查询时,宏碁-得到另一个-但所有宏碁值保持不变。我还编辑了我的问题。
    UPDATE url_alias SET keyword = CONCAT( keyword, '-' )
    where keyword = ?