gpt4 book ai didi

php - 修改 MYSQL 查询以仅选择特定行,用作一种索引

转载 作者:行者123 更新时间:2023-11-29 00:58:47 24 4
gpt4 key购买 nike

我正在为一个简单的论坛编写搜索表单,但我无法找到一种解决方案来仅选择我感兴趣的字段。名为“消息”(MySql) 的论坛表使用此结构:

MessageID - FirstMsg - Content
201 - 0 - Jack and Rose
202 - 201 - Rose
203 - 201 - Jack, Rose, David
204 - 0 - Bill
205 - 204 - Rose
206 - 0 - Rose and David
207 - 206 - David

主要问题是我正在使用的 php 论坛页面将 FirstMsg 为 0 的消息识别为“父”消息,将 FirstMsg 不同于 0 的消息识别为对 0 且 MessageID 等于其 FirstMsg 的消息的回复。

是的。带有 201 的行作为 MessageID 201 是 202 和 203 的父级,将被视为对帖子 201 的回复。

通过 MySql 查询和 php,我可以轻松获取内容:

$MySql = "SELECT * FROM Messages WHERE Content LIKE '%$Search%'" ORDER BY Date DESC LIMIT 1, 30";
$Result = mysql_query($MySql);
while($rs = mysql_fetch_array($Result)) {

}

比如搜索Rose得到,在while循环中回显内容:

201 - 0 - Jack and Rose
202 - 201 - Rose
203 - 201 - Jack, Rose, David
205 - 204 - Rose
206 - 0 - Rose and David

当我需要通过查询获取“父”元素时,即使是“Rose”也不存在于父消息中,而只存在于其中一个回复中,例如:

201 - 0 - Jack and Rose
204 - 0 - Bill
206 - 0 - Rose and David

有可能只改变 MySql 查询吗?我需要它,因为在同一页面中,查询本身用于在 php 生成的“页面”之间导航,当它们的计数在每页最大消息数之后增加时。在此先感谢您的帮助。

最佳答案

您基本上需要像这样过滤掉结果:

 - set finalResultSet as nothing - if the FirstMsg = 0 : then union MessageID with finalResultSet - else : union FirstMsg with finalResultSet

You could do the filtering part in PHP with the above conditions.

To filter it in mysql, I was thinking of something like this:


(
SELECT MessageID FROM Messages
WHERE
FirstMsg=0 AND
Content LIKE '%$Search%'
ORDER BY Date DESC LIMIT 1, 30
)
UNION
(
SELECT FirstMsg FROM Messages
WHERE
Content LIKE '%$Search%'
ORDER BY Date DESC LIMIT 1, 30
)

效率极低。我不擅长 MySQL 查询。但你肯定明白这个想法,不是吗?另外,我相信这里有很多专家会提出更好的解决方案。祝你好运! :-)

关于php - 修改 MYSQL 查询以仅选择特定行,用作一种索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4761270/

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