我想根据用户的兴趣(关键字)显示出版物。

用户表

id | username
5  | joelsilva


出版物表

id | publication title
8  | The best car of the year!


兴趣表

id | username | interest
8  | joelsilva | car
9  | joelsilva | year


它在主页上显示所有带有汽车名称和年份的出版物。

我已经试过了:

$pubs = mysql_query(
    "SELECT *
      FROM PUBLICATIONS
      WHERE (interest LIKE '%".$interests."%')
      ORDER BY id desc"
) or die(mysql_error());


它有效,但仅对表中的一种感兴趣。如果添加多个兴趣,则什么也没有显示。

最佳答案

将出版物和兴趣放在标题上,包含感兴趣的内容,并获得不同的出版物行。为用户过滤。

SELECT DISTINCT
       p.*
       FROM publications p
            INNER JOIN interests i
                       ON p.title LIKE concat('%', i.interest, '%')
       WHERE username = ?
       ORDER BY p.id DESC;


(顺便说一句:用户名应该在兴趣表中,而不是用户名。您可能应该看一下here来了解为什么在构建查询而不是参数化查询时不使用字符串连接的原因。)

关于php - 根据用户的兴趣显示出版物,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53982464/

10-14 18:54