私は2つのテーブルを持っています。 1つはビデオ情報を格納し、もう1つはそのビデオに関連付けられたタグを格納します。彼らは共通のフィールドvid_id
を共有します。私はマッチのために両方のテーブルをフルテキスト検索しようとしています。目標はどちらかのテーブルに一致がある場合、そのvid_idを持つすべてのフィールドがビデオから集められることです。全文検索2テーブル
問題は私のクエリがちょうどCall to undefined method PDOConnectionFactory::errorInfo()
でクラッシュすることです。 nameフィールドがtest
のタグに1つのエントリがあるので、1行を返す必要があります。誰でもアイデアはありますか?私はしばらくこのことに苦労してきました。
CREATE TABLE IF NOT EXISTS `tags` (
`id` varchar(35) NOT NULL,
`vid_id` varchar(35) NOT NULL,
`name` varchar(45) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
UNIQUE KEY `vid_id` (`vid_id`,`name`),
FULLTEXT KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `video` (
`timestamp` int(11) NOT NULL,
`vid_id` varchar(32) NOT NULL,
`file_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`uploader` varchar(55) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`title` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`subject_id` int(1) NOT NULL,
FULLTEXT KEY `title` (`title`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
$sql = "SELECT video.*
MATCH(video.title) AGAINST('?') as cscore,
MATCH(tags.name) AGAINST('?') as htscore
FROM video
LEFT JOIN tags ON video.vid_id=tags.vid_id
WHERE
MATCH(video.title) AGAINST('?') OR
MATCH(tags.name) AGAINST('?')
ORDER BY cscore DESC;";
$stmt4 = $conn->prepare($sql);
$result=$stmt4->execute(array('test','test','test','test')) or die(print_r($db->errorInfo(), true));
はおそらく、あなたが 'ますprint_r($ conn->のerrorInfo())'意味? – thetaiko
これはArray([0] => 00000 [1] => [2] =>)によって返されます。まだクエリ結果はありません。それは笑を意味するものですか? – Scarface
"準備"の前にこれを追加してください: '$ conn-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_WARNING);'そしてもう一度やり直してください – thetaiko