gpt4 book ai didi

php - 在 mysql 中搜索行

转载 作者:行者123 更新时间:2023-11-29 08:23:19 28 4
gpt4 key购买 nike

我刚刚学习设置可搜索的表格,对于任何迟钝的问题,我提前表示歉意。我已经设置了一个表,可以让我发布消息,似乎工作正常。我需要能够搜索表中的特定列,以确定消息是否应该显示在特定用户的提要中。这是我的节目创作;

CREATE TABLE `feed` (
`messageid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`userid` text,
`contactid` text,
`subject` text,
`message` text,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`flag` int(2) NOT NULL,
`state` int(2) NOT NULL,
`trash` int(2) NOT NULL,
PRIMARY KEY (`messageid`),
FULLTEXT KEY `contactid` (`contactid`),
FULLTEXT KEY `userid` (`userid`),
FULLTEXT KEY `message` (`message`),
FULLTEXT KEY `subject` (`subject`)
) ENGINE=MyISAM AUTO_INCREMENT=41 DEFAULT CHARSET=latin1

我相信表类型设置正确(MyISAM),并且我希望可搜索的任何字段都已适当设置为文本。这是表格的完整内容;

+-----------+--------+-----------+-----------------------------------------+--------------------------------------------+
| messageid | userid | contactid | subject | message |
+-----------+--------+-----------+-----------------------------------------+--------------------------------------------+
| 40 | 67 | 63 66 65 | Another test with apostraphes '''''' | ''' '''' ,,,, ''' ,,,' '''' test test test |
| 39 | 67 | 63 | Here's a test (with apostraphes '''''') | '''''' test test test ''''' |
+-----------+--------+-----------+-----------------------------------------+--------------------------------------------+

所以,我的想法是在 contactid 列中搜索用户的 userid。如果出现,该消息将显示在用户的源中。但是,当我进行搜索时,什么也没有出现;

mysql> select * from feed where match(contactid) against(63);
Empty set (0.00 sec)

有人可以帮我找出哪里出错了吗?

最佳答案

看起来 userid 代表消息创建者,而 contactid 的集合代表能够查看该消息的用户集。

我建议将 feed 拆分为两个表,一个包含消息,另一个包含 messageidcontactid 的多对多关系而不是包含包含 contactid 列表的列。这样,您将能够连接两个表来创建查询,以使用简单的 = 而不是全文搜索来检索特定用户可查看的消息。

这是一个例子:

messages
+-----------+--------+------------------+----------------+
| messageid | userid | subject | message |
+-----------+--------+------------------+----------------+
| 40 | 67 | Another test | test test test |
| 39 | 67 | Here's a test | test test test |
+-----------+--------+------------------+----------------+

message_contacts
+-----------+-----------+
| messageid | contactid |
+-----------+-----------+
| 40 | 63 |
| 40 | 66 |
| 40 | 65 |
| 39 | 63 |
+-----------+-----------+
SELECT messages.* FROM messages
INNER JOIN message_contacts ON messages.messageid = message_contacts.messageid
WHERE message_contacts.contactid = 63

以这种方式存储数据还可以帮助您避免其他问题。您可以在我最喜欢的答案之一中阅读更多相关信息:Is storing a delimited list in a database column really that bad?

关于php - 在 mysql 中搜索行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705201/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com