从MySQL中提取数据并对字段进行字符串处理

来源:互联网 发布:ins图片下载软件 编辑:程序博客网 时间:2024/05/16 15:11
具体要求:

从mysql数据库的表table中提取u_ch_id(用户ID)与m_content(博文内容)字段,找出发帖数量最多的N个用户,从m_content中找出与该用户相关的用户(@的用户),构建社交关系。table表结构如下:


一、首先对table表进行处理,分析如下:

1.进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名,否则会报错:

Error Code: 1248. Every derived table must have its own alias;

2.可能有重复值,使用distinct;

3.只找m_content中包含‘@’的,使用LIKE '%@%';

4.像这样的语句不能执行:select * from table where id in (select id from table limit X)

例如,如下语句会报错:Error Code: 1235. This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

SELECT DISTINCT    u_ch_id, m_contentFROM    tableWHERE    u_ch_id IN (SELECT             u_ch_id        FROM            table        GROUP BY u_ch_id        ORDER BY COUNT(u_ch_id) DESC        LIMIT 306)        AND m_content LIKE '%@%'ORDER BY u_ch_id

修改后正确执行的查询语句如下:

SELECT DISTINCT    u_ch_id, m_contentFROM    tableWHERE    u_ch_id IN (SELECT             u_ch_id        FROM            (SELECT                 u_ch_id            FROM                table            GROUP BY u_ch_id            ORDER BY COUNT(u_ch_id) DESC            LIMIT N) AS t)        AND m_content LIKE '%@%'ORDER BY u_ch_id


二、导出到csv文件中,每一条记录格式如下:(u_ch_id, m_content)

XXXXX,"XXXXX@XXXXX: XXXXXXXXXXX@XXXXXXX


三、合并u_ch_id相同的记录,并对m_content中@的用户去重,代码如下:

#include<iostream>#include<fstream> #include<string>using namespace std;int main(){int size;string str1, str2, infilename, outfilename;infilename = "XXXX.csv";outfilename = "XXX.csv";ifstream infile;ofstream outfile;infile.open(infilename);outfile.open(outfilename);while (infile.good()) {getline(infile, str1, '\n'); //用"\n"作为分隔符 size = str1.length();if (str2 != ""&&str2.substr(0, 11) != str1.substr(0, 11)){//cout << str2 << endl;outfile << str2 << endl;str2 = str1.substr(0, 11);}if (str2 == "")str2 = str1.substr(0, 11);for (int i = 0, j = 0; i < size; i++) {if (str1[i] == '@') {j = i + 1;while (str1[j] != ':'&&str1[j] != ' '&&str1[j] != '@'&&j <= size - 1) j++;if (j - i > 1 && str2.find(str1.substr(i, j - i)) == str2.npos) //该字段不在str2中str2 += str1.substr(i, j - i);}}}infile.close();outfile.close();return 0;}

完成~

0 0