2015-09-05 63 views
0

查找數組值我有2個字符串不是有序例如orange不總是在第一線或其他值第二位。在另一個陣列

apple, orange, water 

water, juice, orange, something, apple 

我想要如果所有的第一行值都存在於第二行。

  • 我試過REGEXP 'apple|orange|water'|orand,它給我,如果真的,除非我寫的每一個可能的排序one of them存在有不all of them

  • 我也試過IN()但它需要3之類的語句:

    ... 'apple' IN('water', 'juice', 'orange', 'something', 'apple') AND 
        'orange' IN('water', 'juice', 'orange', 'something', 'apple') AND 
        'water' IN('water', 'juice', 'orange', 'something', 'apple') ... 
    
  • 也試過LIKE,但它應該像IN()中進行查詢。

  • 畢竟我試過Match() Against(),但它在join聲明中不起作用。看看這個:

    SELECT * 
    FROM t1 
    INNER JOIN t2 
    ON 
        t1.sth = t2.sth AND 
        MATCH(t1.sthelse) AGAINST(t2.sthelse IN BOOLEAN MODE) 
    

    這裏有2個問題。首先,它不工作,在加入(也可用於where但第二個問題沒有解決其次,AGAINST應該是字符串:? - 隨着Concat()我不能這樣做存在錯誤的伎倆

我想做到這一點並不在這些困難的途徑,也爲我的目的,我應該與MySQL做和處理這些數據無法訪問PHP。 +我可以分裂性格改變任何東西。

任何想法...讚賞。

+0

我認爲'IN()'方法(每個第一陣列中的條目一個這樣的操作)是最好的解決方案。 – eggyal

+0

查看FIND_IN_SET()函數。 –

+0

@RickJames我認爲它就像'IN()'爲我的目的。 – MaHDyfo

回答

0

我的Linux VM仍在加載所以下面的代碼是在MS SQL測試。模式匹配可能會中斷。例如,你的第一個字符串是「蘋果,橙,水」,你的第二個字符串是「蘋果派,橙派,水瓶」。

這是將字符串轉換爲表變量的很好的參考。

​​

DECLARE @FirstLineValues varchar(max), @SecondLineValues varchar(max) 
DECLARE @eachValue VARCHAR(20) 
SELECT @FirstLineValues = 'abc,3,3,5,6,3', @SecondLineValues = 'abc,2,3,4,5,6,7,8,9' 
DECLARE @tblFirstLineValues TABLE(Value varchar(10)) 
DECLARE @tblSecondLineValues Table (value varchar(10)) 
------------------------------------------------------------------------- 
DECLARE @ind int, @allExist bit 
SET @ind = CHARINDEX(',',@FirstLineValues) 
WHILE @ind > 0 
BEGIN 
     SET @eachValue = SUBSTRING(@FirstLineValues, 1, @ind-1) 
     SET @FirstLineValues = SUBSTRING(@FirstLineValues, @ind+1, LEN(@FirstLineValues)[email protected]) 
     INSERT INTO @tblFirstLineValues values (@eachValue) 
     SET @ind = CharIndex(',', @FirstLineValues) 
END 
SET @eachValue = @FirstLineValues 
INSERT INTO @tblFirstLineValues values (@eachValue) 
------------------------------------------------------------------------- 
SET @ind = CHARINDEX(',',@SecondLineValues) 
WHILE @ind > 0 
BEGIN 
     SET @eachValue = SUBSTRING(@SecondLineValues,1,@ind-1) 
     SET @SecondLineValues = SUBSTRING(@SecondLineValues,@ind+1,LEN(@SecondLineValues)[email protected]) 
     INSERT INTO @tblSecondLineValues values (@eachValue) 
     SET @ind = CharIndex(',',@SecondLineValues) 
END 
SET @eachValue = @SecondLineValues 
INSERT INTO @tblSecondLineValues values (@eachValue) 
------------------------------------------------------------------------- 
SELECT @allExist = IIF(count(*) = 0, 1, 0) 
FROM @tblFirstLineValues flv 
LEFT OUTER JOIN @tblSecondLineValues slv ON flv.value = slv.value 
WHERE slv.value IS NULL 
------------------------------------------------------------------------- 
select @allExist 'All first line values exist in second line' 
+0

謝謝你的回答。我可以在加入聲明中做到嗎? (請參閱問題更新 - 第4次嘗試)。你可以把它轉換成一個簡單的代碼,我可以理解發生了什麼。它是否通過遍歷所有行來完成這項工作?或者它可以通過一次性完成所有事情?看,我想查找2個表中的匹配項,並且無法遍歷表1中的單行所有表2行。我想知道mysql的正則表達式是否更好,並且可以在那裏執行(?= apple | orange | water),但是它不支持:( – MaHDyfo