1. 程式人生 > >從MySQL中提取資料並對欄位進行字串處理

從MySQL中提取資料並對欄位進行字串處理

具體要求:

從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_content
FROM
    table
WHERE
    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_content
FROM
    table
WHERE
    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,"[email protected]: [email protected]

三、合併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;
}

完成~

相關推薦

MySQL提取資料進行字串處理

具體要求: 從mysql資料庫的表table中提取u_ch_id(使用者ID)與m_content(博文內容)欄位,找出發帖數量最多的N個使用者,從m_content中找出與該使用者相關的使用者(@的使用者),構建社交關係。table表結構如下: 一、首先對table表

Pig指令碼Hiveload資料存入到Hbase

1、我們先建一個Hive表test01: create table test01(name String, age int, phone String,province String, city String) ROW FORMAT DELIMITED FIELDS TERMINATED B

按空格和按換行檔案提取資料

1,讀取檔案的類為ifstream,其中“i”代表“in”,針對變數而言,ifstream所在的標頭檔案為fstream; 2,ifstream中有open方法,可以開啟檔案; 3,ifstream中有>>方法,可以以空格為分割符,以換行為結束符讀取資料; 4,iostrea

詳細步驟!!!idea+springboot+mybatis+jsp+bootstrap實現mysql查詢出資料顯示(原始碼)

實現效果: 資料庫對應資料: 開發環境: IntelliJ IDEA 2017.2.5 x64 java version "1.8.0_151" x64 mysql 6.0.11-alpha-community x64 步驟: 1.建立工程: file--new-

python檔案讀寫(file1讀出資料計算,然後將結果寫入到file2

要求新建兩個檔案,file1、file2,要求開啟file1檔案,分別對每一行數字進行求和,並將每一行的結果寫在file2中。 file1: 20 30 40 20 52 63 52 52 85 52 8 456 522 25 36 85 96 74 程式原始碼: 定義一個求和函式

spark叢集HDFS讀取資料計算

一、             利用spark從hadoop的hdfs中讀取資料並計算 1.1準備階段 部署好hadoop分散式搭建(+zookeeper,6臺機器)可以參考這篇部落格:http://blog.csdn.net/vinsuan1993/article/deta

solr5.5之資料庫匯入資料建立索引

前面已經介紹了solr-5.5.0的安裝與部署,接下來我將分享solr-5.5.0資料匯入之從資料庫中匯入資料並建立索引的例子。由於本人也是剛剛接觸solr,不足之處,請大家多多見諒。solr和lucene版本更新太快了,版本之間的差異十分大。比如之前的版本中,在core中

python實現檔案讀取資料繪製成 x y 軸圖形

import matplotlib.pyplot as plt import numpy as np def readfile(filename):     dataList = []     dataNum = 0     with open(filename,'r')

是用JDBC資料庫獲取資料以java物件返回

/** * * @param c * for example Person.class * @param primaryKeys * primaryKeys為主鍵,引數順序和表中保持一致 如果id, name

資料庫查詢資料顯示到datagridview的兩種方法

第一種方法:利用SqlDataAdapter的Fill()方法,                      優點:可以不用考慮資料庫表中每一列的資料型別,將資料一次性匯入到表中;                      缺點:不能在查詢過程中編輯查詢的資料 strin

使用mysqldump匯出資料包含的單引號的處理

最近在做一個日誌統計專案,有一個輔助表是在MySQL資料庫的,現在要將其遷移到Postgresql,自然是先用mysqldump將MySQL裡面的資料匯出,然後再匯入到Postgresql即可。但在實際操作過程中,發現一些欄位中本身就含有單引號,在匯出的sql語

區塊鏈開發筆記——getBlock所得區塊的各個進行解釋

一.定義 getBlock函式的返回值為區塊物件,其中包含一下多個欄位: Number - 區塊號。當這個區塊處於pending將會返回null。 hash - 字串,區塊的雜湊串。當這個區塊處於pending將會返回null。 parentHash - 字串

scrapy抓取拉勾網職位資訊(四)——進行提取

上一篇中已經分析了詳情頁的url規則,並且對items.py檔案進行了編寫,定義了我們需要提取的欄位,本篇將具體的items欄位提取出來 這裡主要是涉及到選擇器的一些用法,如果不是很熟,可以參考:scrapy選擇器的使用   依舊是在lagou_c.py檔案中編寫程式碼 首先是匯入Lag

mysql獲取表名&名的查詢語句

  1:查詢資料庫中所有表名  select table_name   from information_schema.tables   where table_schema='csdb' and table_type='base table';   table_schema:用於限定資料

JavaJSONArray的物件的某個進行排序

需求: 今天呼叫一個第三方介面,然後返回的是一個josn陣列,需要根據裡面的“報告日期”報告日期進行由大到小排序,最新的排在前面。 這種別人介面已經開發完成,不能改,所以只有我們自己來排序。 思路一():將josn陣列轉為list集合,然後獲取到裡面的每個物件,再獲取“報告日期”,然後排序,然後對對應的

mysql如何使用合適的長度

下面是mysql一個欄位中含有哪些資訊 一般重要的欄位為型別,長度,屬性,非空,索引,自增等等。 注:A_I:auto_increment,代表自增。 欄位的型別有好多種,先說下欄位中比較常用的型別和長度 整數型 1、整數型的數值型別已經限制了取值範

Java – 獲取類特定資料型別的

原文連結作者:mkyong 譯者:王樂([email protected]) 一些Java反射API的例子。 1.顯示所有欄位和資料型別 使用反射遍歷一個類宣告的所有欄位。 CompanyA.java package com.mkyong.test; import java.

文字提取圖片路徑(java 解析富文字處理 img 標籤)

很多專案都需要到富文字來新增內容,就好比新聞啊,旅遊景點之類的,都需要使用富文字去新增資料,然而怎麼我這邊就發現了兩個問題 怎樣將富文字的圖片的 src 獲取出來? 方法一: 利用正則表示式: public static List<String> getImgStr(String h

{dede:sql}標籤,取出欄後,進行邏輯操作時的巢狀方法

<div>{dede:sql sql='select body from dede_addonarticle where typeid=4 order by rand() LIMIT 1'} [field:body runphp='yes']

mysql find_in_set() 查詢出可變用逗號分隔的目標

有時候我們在設計資料庫時有以下情況,如:在視訊表中有個欄位week, 他儲存的是視訊在周幾播放,如某視訊只在周1,4,6播放,那麼week欄位對應的值以 1,4,6 的格式儲存那們我們要用sql查詢所有視訊中周4可以播放的視訊 (這個時候不是用like能解決的,使用like可