DISTINCT和CONCAT在一起

时间:2014-03-27 08:43:18

标签: mysql

我需要通过添加 - SEO字词为网站创建唯一的distinct字词。 我试过了查询

UPDATE url_alias SET `keyword = (SELECT DISTINCT CONCAT( keyword, '-' ));

但是此查询会将-添加到所有单词中。这个查询有什么问题?

示例:单词是Acer,Acer,Acer-,Apple,Apple,Apple-这些应该是Acer,Acer-,Acer--,Apple,Apple-,Apple -

here中的表格示例。

4 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

尝试:

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);

这是:

  1. 创建一个包含所有唯一关键字的临时表:也就是说,它们不会在不同的行重复。
  2. 更新TSEL中包含的关键字。
  3. 会话结束后,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);
    

    如果你考虑" Acer"和"宏碁 - "与众不同:

    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);
    

答案 2 :(得分:0)

UPDATE url_alias SET `keyword` = `keyword` + '-'

答案 3 :(得分:0)

  

我需要通过添加 - 为不同的网站创建独特的SEO词   话。 ...

     

但是此查询会添加 - 所有单词。这个查询出了什么问题?

您可以使用WHERE条件过滤并将值设置为特定事件。

示例

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

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