我的数据库包含一个发言人信息表(姓名,地理位置,专业)。我需要使用PHP脚本从CSV文件中定期更新表。我遇到的麻烦是,这些专长存储为逗号分隔的列表。如果扬声器的表条目已经存在,则我想从CSV文件中添加专业,除非该专业已经在列表中。这是我想出的(可能是怪诞的)SQL语句(由我的PHP脚本读取CSV文件生成):

INSERT INTO speakers (email, last_name, first_name, specialty, country_code,
  iot, imt, role, num_responses, sat_total)
VALUES ('[email protected]', 'Last', 'First', 'Computers,', '777',
 'AP', 'ASEAN', 'Big Shot', 15, 1500)
    ON DUPLICATE KEY UPDATE num_responses = (num_responses + 15),
     sat_total = (sat_total + 1500),
  specialty = CONCAT(specialty,
     (IF(LOCATE(specialty, 'Computers,') > 0, '', 'Computers,')))


我的理解是,如果LOCATE在现有专业列中找到“ Computers”字符串,则应该向CONCAT函数返回一个空字符串。但是,每次我运行命令时,LOCATE都会返回“ Computers”字符串,因此,第二次运行后,专用表条目字符串看起来像“ Computers,Computers”,第三次运行后为“ Computers,Computers,Computers” ,依此类推...预先感谢您的帮助。

最佳答案

出于文档目的。如评论中所述,应该交换LOCATE参数以产生所需的输出:

INSERT INTO speakers (email, last_name, first_name, specialty, country_code,
  iot, imt, role, num_responses, sat_total)
VALUES ('[email protected]', 'Last', 'First', 'Computers,', '777',
 'AP', 'ASEAN', 'Big Shot', 15, 1500)
    ON DUPLICATE KEY UPDATE num_responses = (num_responses + 15),
     sat_total = (sat_total + 1500),
  specialty = CONCAT(specialty,
     (IF(LOCATE( 'Computers,',specialty) > 0, '', 'Computers,')))

关于mysql - MySQL LOCATE函数在IF块中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39862132/

10-11 13:43