我的目标是在表中呈现 DOC_sql 和 MDT_sql 中的数据。找不到如何实现此链接的解决方案。
目标是搜索文档并根据匹配的标签呈现文档。
输入数据
CALL SearthDocuments('\'Book\',\'Currency\'', 'en_ENG');
代码
DELIMITER //
CREATE PROCEDURE SearthDocuments(IN VAR_TT_names VARCHAR(255), VAR_LANG_prefix CHAR(6))
BEGIN
SET @TT_sql = CONCAT('SELECT TAG_ID FROM TagTranslate WHERE TT_text IN (', VAR_TT_names, ')');
SET @DOC_ID_sql = CONCAT('SELECT DOC_ID FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');
SET @DOC_sql = CONCAT('SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = "', VAR_LANG_prefix, '"' );
SET @MDT_sql = CONCAT('SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');
-- SET @COM_sql = CONCAT('?')
-- PREPARE COM_stmt FROM @COM_sql;
-- EXECUTE COM_stmt;
-- DEALLOCATE PREPARE COM_stmt;
END
// DELIMITER ;
两个表都有标识符 DOC_ID
表:DOC_sql
DOC_ID, DT_ID, DT_desc, DT_title, A_name, LANG_prefix
表:MDT_sql
DOC_ID, TAG_HITS
最佳答案
这是问题的解决方案。工作代码。
DELIMITER //
CREATE PROCEDURE SearthDocuments(IN VAR_TT_names VARCHAR(255), VAR_LANG_prefix CHAR(3))
BEGIN
SET @TT_sql = CONCAT('SELECT TAG_ID FROM TagTranslate WHERE TT_text IN (', VAR_TT_names, ')');
SET @DOC_ID_sql = CONCAT('SELECT DOC_ID FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');
SET @DOC_sql = CONCAT('SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = ',VAR_LANG_prefix);
SET @MDT_sql = CONCAT('SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');
SET @COM_sql = CONCAT('
SELECT * FROM
(SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = "',VAR_LANG_prefix,'") AS V_DOC
LEFT JOIN
(SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql ,') GROUP BY DOC_ID HAVING COUNT(DOC_ID)) as Searth
on V_DOC.DOC_ID = Searth.DOC_ID ORDER BY TAG_HITS DESC;'
);
PREPARE COM_stmt FROM @COM_sql;
EXECUTE COM_stmt;
DEALLOCATE PREPARE COM_stmt;
END
// DELIMITER ;
关于mysql处理后连接两个concat表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32668220/