EDIT3 MySQL Fiddle Here。我已经制作了示例MySQL
,因此您可以看到实际问题。虽然我希望在Jamie Foxx, Christoph Waltz
结果中有2 names
,但它会提供更多内容。即使它的编写方式与SQL
示例中的方式完全相同,也可以正确返回名称。 :/
EDIT2 SQL Fiddle here。这是一个更简单的版本,但逻辑就在那里。我需要在MySQL
中使用此功能,因为小提琴在SQL
中。当我用SQL
和LENGTH
替换LOCATE
函数并使用PhpMyAdmin进行测试时,它会返回actors
列的全部内容,而不仅仅是前两个名称。我现在更加困惑,因为LOCATE
应该等同于CHARINDEX
。
EDIT1 *哦,我刚发现LEN
中不存在CHARINDEX
或MySQL
。我想我可以用LEN
替换LENGTH
,但我不知道如何处理CHARINDEX
我尝试使用LOCATE
,但结果不正确它给出了完整actors
字段的内容。对此有何见解?
对我以前的问题的另一个跟进。这应该是它的结束。我有部分查询使用len
函数在SQL Fiddle上工作,但是只要我在实际数据库中将其实现到最终查询中,我就得到函数不存在错误。列出下面我认为相关的所有内容:
MySQL查询
SELECT
title,
director,
thumb,
LEFT(actors, LEN(actors) - CHARINDEX(', ', actors))AS '2 names'
FROM test
WHERE MATCH (title, director, actors) AGAINST ('arc*' IN BOOLEAN MODE)
错误
#1305 - FUNCTION database-name.LEN does not exist
设置
OS: MAC OSX
SERVER: MAMP
DB ACCESS: PhpMyAdmin
SHOW CREATE TABLE test
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`director` varchar(255) NOT NULL,
`actors` varchar(10000) NOT NULL DEFAULT 'Jamie Foxx, Christoph Waltz, Leonardo DiCaprio, Kerry Washington, Samuel L. Jackson',
`summary` text NOT NULL,
`cover` varchar(255) NOT NULL DEFAULT 'http://localhost:8888/assets/OBS/img/uploads/covers-thumb/django_thumb.jpg',
`thumb` varchar(255) NOT NULL DEFAULT 'http://localhost:8888/assets/OBS/img/uploads/covers-bug/django1_cover.jpg',
`trailer` varchar(255) NOT NULL DEFAULT 'fnaojlfdUbs',
PRIMARY KEY (`id`),
FULLTEXT KEY `myindex` (`title`,`director`,`actors`)
) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8
我真的不明白为什么我会收到此错误,因为该声明在SQL Fiddle上运行良好。如果您需要任何其他信息,请提出要求。感谢大家的阅读,并提前回复。
顺便说一句:它有可能是由actors varchar(10000)
引起的吗?
答案 0 :(得分:12)
MySQL没有内置的CHARINDEX()函数。相反,您可以使用LOCATE等效于charindex,而不是LEN,您可以使用LENGTH
SELECT
title,
director,
thumb,
LEFT(actors, LENGTH(actors) - LOCATE(', ', actors))AS '2 names'
FROM test
WHERE MATCH (title, director, actors) AGAINST ('arc*' IN BOOLEAN MODE)
如果您只想显示两个演员姓名,可以使用SUBSTRING_INDEX
SELECT
title,
director,
thumb,
SUBSTRING_INDEX(actors, ',', 2) AS '2 names'
FROM test
WHERE MATCH (title, director, actors) AGAINST ('test*' IN BOOLEAN MODE)