QQ群关系可视化查询php搭建方法

  • 内容
  • 相关

前言

QQ群关系可视化查询

      QQ群关系可视化查询基本在网上已经销声匿迹了,能存活的都是作为内部查询在用。安三搭建的是本地c语言写的系列查询系统,这里还是分享一下PHP查询搭建的方法,有想要搭建的可以看下,引到一下思路。

 

正文

      想要搭建QQ群关系可视化查询理清需要两点,先给原始数据建立引索并优化其查询速度,再搭建一个查询系统可以直接调用查询优化过的数据库。

1.为所有的表创建索引

ADD INDEX `QunNum_index` (`QunNum`);
ADD INDEX `QQNum_index` (`QQNum`)  ;

2.创建存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `SearchByQQ`(IN `qq` int)
BEGIN
    DECLARE i int;
    DECLARE tblname VARCHAR(10);    
    DECLARE sql_text VARCHAR(1000);

    DROP TABLE IF EXISTS `temp`;
    CREATE TABLE `temp`(QQNum int,nick varchar(100),QunNum int) ENGINE=MEMORY;
    SET i=1;
        WHILE i<1100 DO
        SET tblname=CONCAT('group',i);
        SET sql_text=concat('insert into `temp` select QQNum,nick,QunNum from ' , tblname , ' where QQNum=' , qq , ';');
        SET @sql_text=sql_text;

        PREPARE stmt FROM @sql_text;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;

        SET i=i+1;
    END WHILE;
    SELECT * FROM `temp`;
END

3.编写PHP

<?php
set_time_limit(60);
?>
<!DOCTYPE html>
<html>
<head>
   <title>QQGroup Search System v1.0</title>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-with,initial-scal=1">
   <link href="bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div style='width:75%;margin:0 auto;'>
<form class="form-inline" role="form" action="" method="get" style="margin-bottom:10px;">
    <div class="form-group">
        <input type="input" class="form-control" name="qun" id="qun" placeholder="请输入QQ群号码" value=""> <input name="sbmt" type="submit" class="btn btn-primary">
    </div>
</form>
<?php
    if(intval($_GET['qun'])>100000)
    {
        @mysql_connect("localhost", "root", "123456");
        @mysql_select_db("QQGroupInfo");
        mysql_query("set names utf8");
        $qun=intval($_GET['qun']);
        $sql="select * from QQGroupInfo.qunlist".CEIL($qun/1000000)." where QunNum=$qun";
        $rs=mysql_query($sql) or die(mysql_error());
        $r=mysql_fetch_assoc($rs);
        if($r)
        {
            echo "<table class='table table-striped table-bordered'>";
            echo "<tr><td colspan='10'>QQ群号:{$r['QunNum']}<br>\r\n";
            echo "QQ名称:{$r['Title']}<br>\r\n";
            echo "QQ简介:{$r['QunText']}<br>\r\n";

            $sql="select * from QQGroupDetail.group".CEIL($qun/100000)." where QunNum=$qun";
            $rs=mysql_query($sql) or die(mysql_error());
            echo "群 人 数:".mysql_num_rows($rs);
            echo "</td></tr><tr>";
            while($r=mysql_fetch_assoc($rs))
            {
                $i++;
                echo "<td align='center'><a href='?qq={$r['QQNum']}'>{$r['QQNum']}</a><br>{$r['Nick']}</td>";
                if($i%10==0) echo "</tr>\r\n\t<tr>";
            }
            echo "\t</tr>\r\n</table>";
        }
    }
    elseif(intval($_GET['qq'])>10000)
    {
        define('CLIENT_MULTI_RESULTS', 131072);//这两行是使用存储过程的关键地方
        @mysql_connect("localhost", "root", "123456",true,CLIENT_MULTI_RESULTS);
        @mysql_select_db("QQGroupDetail"); //数据库库名名
        mysql_query("set names utf8");
        $qq=intval($_GET['qq']);
        $rs=mysql_query("call SearchByQQ($qq);") or die(mysql_error());
        echo "<table class='table table-striped table-bordered table-hover'>";
        echo "<tr><td>QQ号码</td><td>昵称</td><td>群号码</td></tr>";
        while($r=mysql_fetch_assoc($rs))
        {
            echo "<tr><td>{$r['QQNum']}</td><td>{$r['nick']}</td><td><a href='?qun={$r['QunNum']}'>{$r['QunNum']}</a></td></tr>";
        }
        echo "</table>";

    }
?>
</div>
</body>
</html>

4.总结

      建议不要尝试上线查询系统,一来数据库较大,二来自找麻烦。还有在数据库查询速度优化上,思路不止一种,越好的思路决定着整体代码的查询速度,我见过一个DBA大神整体查询只需要3秒,奈何本人愚钝,只能看懂其优化方法重塑不了其操作,数据库上的造诣就像是练内功,需要时间去沉淀。

本文标签:

版权声明:若无特殊注明,本文皆为《安三》原创,转载请保留文章出处。

百度收录:百度已收录『查看详情』

本文链接:QQ群关系可视化查询php搭建方法 - https://www.15qq.cn/data_model/211.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

允许邮件通知

评论

4条评论
  1. avatar

    韩立 Lv.1 Chrome 64.0.3282.204 Chrome 64.0.3282.204 Windows Windows 回复

    多谢站长的教程,重复实现了下,发现了一个小问题:
    问题描述:部分群号在QQGroupInfo中查不到,但在QQGroupDetail可以查到,比如100100,这就导致php查询源码中29行if($r)判断会漏掉信息。
    是否与数据库有关?因为我下载的数据库是合并的,只有群信息和群成员信息两个表。站长可以查询复现下。

    湖北省武汉市 电信

    1. 安三 Sogou Explorer Sogou Explorer Windows Windows 回复

      回复了韩立:应该是你数据库问题,一定要使用原始数据,最原始的数据有11个GroupData和11个QunInfo库构成,原始数据的储存是由其对应关系的,比如QunInfo1里表1只存10XXXX的群数据,所以理论上群号只要>100000 , <10位群号,都是可以被查询到的,只是取决于有没有这个群信息。

      山东省济南市 联通

  2. avatar

    null Lv.1 Chrome 73.0.3683.86 Chrome 73.0.3683.86 Windows Windows 回复

    很棒..就是没有裤子..现在应该没有地方能找到了吧

    北京市 电信

    1. 安三 Sogou Explorer Sogou Explorer Windows Windows 回复

      回复了null:只要曾经在网上流转过的东西都会有痕迹,只是方法没找对。

      波兰 华沙董布罗夫斯基军队技术学院