2014-01-29 56 views
0

我在MySQL中有2個表格registerSMSusers and GroupsSMS。這兩個表都有一個名爲mobile的列。從HTML表單中,我得到逗號分隔的值,如test,alltest,john。這些逗號分隔的值將出現在2個表中的任何一箇中。例如測試(名稱列)存在於registerSMSusersalltest存在於GroupsSMS(組名列)。如何從2個不同的表格中獲得一列

在Java中,我可以用逗號分割,然後檢查它是否存在於任何表中或不是。如果存在,則獲取移動設備。只是想知道是否有任何SQL查詢相同。

這是SQL架構

DROP TABLE IF EXISTS `GroupsSMS`; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `GroupsSMS` (
    `Name` varchar(50) DEFAULT NULL, 
    `email` varchar(50) DEFAULT NULL, 
    `mobile` varchar(20) DEFAULT NULL, 
    `GroupName` varchar(20) DEFAULT NULL, 
    `GroupID` int(11) NOT NULL AUTO_INCREMENT, 
    `dataselected` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`GroupID`) 
) ENGINE=MyISAM AUTO_INCREMENT=191 DEFAULT CHARSET=latin1; 

DROP TABLE IF EXISTS `registerSmsUsers`; 
/*!40101 SET @saved_cs_client  = @@character_set_client */; 
/*!40101 SET character_set_client = utf8 */; 
CREATE TABLE `registerSmsUsers` (
    `name` varchar(50) DEFAULT NULL, 
    `email` varchar(50) DEFAULT NULL, 
    `mobile` varchar(20) DEFAULT NULL, 
    `uid` int(11) NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY (`uid`), 
    UNIQUE KEY `mobile` (`mobile`), 
    UNIQUE KEY `email` (`email`) 
) ENGINE=MyISAM AUTO_INCREMENT=83 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 

這是sqlfiddle

+0

哪列將檢查值? – DhruvJoshi

+0

@DhruvJoshi GroupsSMSusers Groupname和For registersmsusers name – SpringLearner

+0

你應該嘗試這個鏈接http://stackoverflow.com/questions/471914/can-you-split-explode-a-field-in-a-mysql-query – DhruvJoshi

回答

1

我你在Java中

String names[] = csv.split(','); 

分割字符串你可以搜索任何registerSmsUsersGroupsSMS相應的手機號碼與

PreparedStatement stmt = conn.prepareStatment("select u.mobile from registerSmsuser u where u.name = ? union select g.mobile from GroupsSMS g where g.groupname = ?"); 
stmt.setString(1, names[0]); 
stmt.setString(2, names[0]); 
ResultSet rs = stmt.executeQuery(); 
if (rs.first()) { 
    // do something with the mobile number 
} 

這將從用戶和組表都選擇項。如果您需要知道,從哪裏來的號碼,您可以添加一個固定的字符串到您的選擇

select u.mobile, 'user' as origin from registerSmsuser u ... 
union 
select g.mobile, 'groups' as origin from GroupsSMS g ... 
1

MySQL沒有一個現成的功能拆分CSV字符串。您必須手動使用SUBSTRING使用SUBSTRING_INDEX或使用REGEXP。 查看類似的問題here

在您說的分裂CSV成存儲在表「CSVTable」 {ID,將strValue}實際字符串的詳細信息,您可以檢查像

SELECT G.mobile as mobilenumber 
FROM 'GroupsSMS' G LEFT JOIN 'CSVTable' C 
on G.GroupName =C.strvalue 
WHERE C.strvalue is NOT NULL 

UNION 

SELECT R.mobile as mobilenumber 
FROM 'registerSMSusers' R LEFT JOIN 'CSVTable' C 
on R.name=C.strvalue 
WHERE C.strvalue is NOT NULL 

注意我沒有使用UNION ALL得到不同的值集

的僞碼獲取值到臨時表

DECLARE @CSVTABLE TABLE (id int not null, strvalue NVARCHAR(400) NOT NULL) 
DECLARE @var int 
SET @var=1 
DECLARE @STREXP NVARCHAR(MAX) 
DECLARE @BUFF NVARHCAR(400) 
SET @BUFF=SUBSTRING_INDEX(@STREXP,',',1) 
SET @STREXP=REPLACE(@STREXp,@BUFF+',','') 
    WHILE @BUFF IS NOT NULL DO 
    INSERT INTO @temp VALUES(@var,@BUFF) 
    @[email protected]+1 
    @VUFF 
    END WHILE 
+0

但後該值被分割,我該如何檢查它是否存在於哪個表和移動號碼中。例如,我分割了完整的字符串'test,alltest,john',現在我想獲得john的手機號碼。那麼你能告訴我怎麼樣? – SpringLearner

+0

任何解決方案? – SpringLearner

+0

我已經更新了我的答案。請告訴我,如果你需要任何幫助/澄清 – DhruvJoshi

相關問題