我将尝试以最好的方式解释这一点。
我的数据库中存储了一组日志。我需要处理那些存储不太好的日志(以一种非常低效的方式)。
我先给你看表:
因此,value
列中的这些句子需要分成可用的部分,以便我可以分别向我的用户列出适当的信息。
我需要从该列中收集的信息:
- 行动类型(禁止、警告、踢、监禁和罚款)
- 发出行动的人(即 Scotty)
- 罚款金额
- 行动的原因
有了这些收集到的信息,我需要在表格中单独向用户显示。禁令应列在一个单独的表格中,单独发出警告,依此类推。
每种情况下的表格看起来如何:
<h2>Bans</h2>
<table>
<tr>
<th>Issued by</th>
<th>Time</th>
<th>Reason</th>
</tr>
<tr>
<td>THE NAME OF THE ISSUER</td>
<td>DATE AND TIME</td>
<td>THE REASON</td>
</tr>
</table>
<h2>Fines</h2>
<table>
<tr>
<th>Issued by</th>
<th>Time</th>
<th>Reason</th>
<th>Amount</th>
</tr>
<tr>
<td>THE NAME OF THE ISSUER</td>
<td>DATE AND TIME</td>
<td>THE REASON</td>
<td>THE AMOUNT</td>
</tr>
</table>
禁令、警告和监狱应该具有相同的表结构,只是罚款与金额列略有不同。
我如何收集信息
好吧,我正在以一种简单的方式从数据库中获取信息,使用这种方法:
public function obtain_player_adminlog($player_id)
{
global $samp_db;
$player_name = $this->get_pname_by_id($player_id);
$sql = "SELECT * FROM adminlog
WHERE value LIKE '%" . $player_name . "%'";
$result = $samp_db->sql_query($sql);
return $samp_db->sql_fetchrowset($result);
}
我知道这个功能不是万无一失的功能,但这是我能得到的最好的。查询中使用的方法来自与问题无关的 phpBB DBAL。
包含此数据的返回数组如下所示:
Array
(
[0] => Array
(
[entryID] => 5
[value] => AdmWarn: {FFFFFF}Scott_Parker has unbanned player Dave_Meniketti.
[entryTime] => 2013-10-24 00:49:56
[tickcount] => 4577394
)
[1] => Array
(
[entryID] => 11
[value] => Fine: Scott_Parker has been fined $25039 by Scotty, reason: test test
[entryTime] => 2013-10-24 00:52:02
[tickcount] => 4703416
)
[2] => Array
(
[entryID] => 12
[value] => Ban: Scott_Parker has been banned, reason: Third warning (last from Scott_Parker)
[entryTime] => 2013-10-24 00:52:11
[tickcount] => 4712439
)
)
总结一下
LIKE
我需要一种万无一失的方法来从数据库中获取信息,因为如果名称重复两次(即。Array[2]
)很容易被 MySQL 子句愚弄。- 我需要一种方法来根据操作拆分信息并将其列在不同的表上。
对我来说,这看起来是一项非常复杂的任务,我想不出办法来解决这个问题。几天来,我一直在思考如何实现这一目标——没有运气。
任何帮助将不胜感激。