MySQL匹配2个字段

时间:2015-06-04 14:57:42

标签: mysql match

我在MySQL中遇到了针对()的match()问题。 我不能将2个columfields相互匹配,只有当我使用一个程序时,才清楚。

现在问题: 我有一个查询来搜索双项(只有技术数据):

SELECT t1.acid,t2.acid, t1.Brand, t2.ModelNameRough,t1.ModelNameDetail, t2.ModelNameDetail,.........
FROM ref_web_tb t1 join ref_web_tb t2
on t1.Brand = t2.Brand
and t1.ModelNameRough = t2.ModelNameRough 
and t1.BodyType ....(alot of other things to compare)
and (t1.acid < t2.acid)

但这还不够。 有一个名为“modelnamedetail”的字段锁定如下: “1.9 TDI COMFORT VARIANT DPF” 要么 “1.9 TDI COMFORTLINE VARIANT DPF”

(只有舒适的线路不同,但两辆车的价格不同等等,但技术数据相同)

所以我必须将t1.modelname与t2.modelname匹配,并使用分数来检查名称是否几乎相同。 (另外,这将是检查是否存在双重条目的数据的loooooot,因为在同一个粗略模型中有很多具有相同技术数据的汽车)

对()的匹配()的过程没问题,我会这样做:(只是一个测试)

DELIMITER $$

DROP PROCEDURE IF EXISTS `offensichtlich_doppelte` $$
CREATE PROCEDURE `offensichtlich_doppelte` (search_string TEXT)
DETERMINISTIC
READS SQL DATA
BEGIN

 SELECT t1.acid, t1.Brand,t1.ModelNameRough,t1.ModelNameDetail, MATCH (t1.ModelNameDetail) AGAINST (search_string) AS score
     FROM ref_web_tb t1 

      limit 50;

END $$

DELIMITER ; 

但现在我不知道如何在程序中使用查询结果?! 我完全糊涂了现在该做什么;( 有人可以给我一个提示,我可以解决这个问题吗?

另一个简短的问题: 有时像“gearboxtype”这样的东西是空的。 如果其中一个技术字段为null,则不会列出。 我可以这样做:

SELECT *
FROM ref_web_tb t1 join ref_web_tb t2
on ....
and if gearboxtype is null then ignore gearboxtype
....

我想的是:

SELECT *
    FROM ref_web_tb t1 join ref_web_tb t2
    on ....
    and if(t1.gearboxtype is null, ignore, t1.gearboxtype = t2.gearboxtype)
    ....

会起作用,但似乎没有,因为我不知道如何忽视这个案子;( (等等..也许是答案?)

感谢阅读;)

1 个答案:

答案 0 :(得分:1)

关于你的第一个问题,我认为cursors正是你要找的。

首先,您需要在过程中声明一些变量,以存储您获得的数据。

DECLARE a CHAR(10);
DECLARE b INT;

由于光标只能遍历一次,因此必须在其末尾处理NOT FOUND异常。

DECLARE done INT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

然后您声明cursor来获取您的数据。

 DECLARE results CURSOR
 FOR
 SELECT stuff, otherstuff FROM someTable;

这只是创建了光标。然后打开它,以便实际执行查询:

OPEN results;

要获得查询结果,请迭代光标:

read_loop: LOOP
    FETCH results INTO a, b;
    IF done THEN
        LEAVE read_loop;
    END IF;

    --do your business here with a and b

END LOOP;

最后,关闭光标:

CLOSE results;

希望这有帮助。