EDIT3 MySQL小提琴在这里.我做了这个例子MySQL
,你可以看到实际的问题.虽然我期望Jamie Foxx, Christoph Waltz
在2 names
结果中有更多.即使它的编写方式与它SQL
正确返回名称的示例完全相同.:/
EDIT2 SQL小提琴在这里.这是一个更简单的版本,但逻辑就在那里.我需要让这个工作在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)
Run Code Online (Sandbox Code Playgroud)
错误
#1305 - FUNCTION database-name.LEN does not exist
Run Code Online (Sandbox Code Playgroud)
建立
OS: MAC OSX
SERVER: MAMP
DB ACCESS: PhpMyAdmin
Run Code Online (Sandbox Code Playgroud)
SHOW CREATE TABLE测试
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
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么我会收到这个错误,因为该声明在SQL Fiddle上运行良好.如果您需要任何其他信息,请提出要求.感谢大家的阅读,并提前回复.
顺便说一下:它是由它造成的actors varchar(10000)
吗?
M K*_*aid 13
MySQL没有内置的CHARINDEX()函数.相反,你可以使用相当于charindex的LOCATE,而不是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)
Run Code Online (Sandbox Code Playgroud)
如果您只想显示两个演员名称,可以使用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)
Run Code Online (Sandbox Code Playgroud)