0

如何根据另一行数据获取行。例如,我想根据其他获得广告。

我知道如何进行比较,我知道如何获取当前活动广告的分数,但我不知道如何获取广告。

我当前的查询如下 - 但它将返回 10 x 同一行,而不是十个最相似的广告。

SELECT
    a.AdvertisementID as A_AdvertisementID,
    IF(a.Topic LIKE a2.Topic, 50, 0) + IF(a.Description LIKE a2.Description, 40, 0) + IF(a.Cate_CategoryID LIKE a2.Cate_CategoryID, 10, 0) as A_Score,
    a.AdvertisementID as A_AdvertisementID,
    a.Topic as A_Topic,
    LEFT(a.Description, 300) as A_Description,
    a.Price as A_Price,
    a.Type as A_Type
FROM
    ".DB_PREFIX."A_Advertisements a2,
    ".DB_PREFIX."A_Advertisements a
WHERE
    a2.AdvertisementID <> a.AdvertisementID
AND
    a.AdvertisementID = :a_id
ORDER BY
    A_Score DESC
4

2 回答 2

1

您应该查看MySQL 全文搜索功能。它允许在数据库中搜索相似的文本内容,而不是搜索适当的子字符串(就像LIKE那样)。然后,您不需要手动计算相似度的“分数”。

网络上有很多例子。

如果您总是想检索至少X条新闻(前提是存在X条新闻),即使没有类似的新闻,请尝试以下操作:

SELECT *, MATCH(Title, Description, Content) AGAINST("News title") AS score
ORDER BY score DESC, RAND() LIMIT 0, 10

我假设X是 10 并且新闻标题是正在寻找相关新闻的新闻的标题,并且全文索引在Title,DescriptionContent列上。

于 2013-11-02T22:43:21.243 回答
0

那是因为您只从 中选择列a,并且在您所说的 WHERE 中a.AdvertisementID = :a_id。从中选择列a2,您应该会得到不同的结果。

SELECT
    a2.AdvertisementID as A_AdvertisementID,
    IF(a.Topic LIKE a2.Topic, 50, 0) + IF(a.Description LIKE a2.Description, 40, 0) +     IF(a.Cate_CategoryID LIKE a2.Cate_CategoryID, 10, 0) as A_Score,
    a2.Topic as A_Topic,
    LEFT(a2.Description, 300) as A_Description,
    a2.Price as A_Price,
    a2.Type as A_Type
于 2013-11-02T22:43:08.100 回答