2013-09-21 73 views
1

我有一個PHP數組(其中包含數千個數據庫)的數據(Facebook用戶ID),我想比較的數組。在數據庫中找到的那些內容中,我希望將它們分成一個新數組。我不知道如何去做這件事。

所以我開始使用此陣
$ids = 3312312,1232424,1242234,2342636,457456,345345

和兩個
$found = 34234234,234234234
$notfound = 23234234,234234,23423423如何根據sql結果分離一個php數組?

如果有人可以幫助,那將是巨大的結束。我已經開始了這幾種不同的方式,但沒有太多。理想情況下,我希望這種比較一次完成,但我不確定這是否可行。

謝謝!

編輯

從你說什麼,我想出了下面的代碼很快。這似乎是你得到它的原因,但是我還沒有能夠慢慢建立起來,所以我不確定它是否正確。

<?php 
$con=mysqli_connect("localhost","root","","sabotage"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

//json array is being posted to this file from another page 
$jsonarray = '[{"name":"Lizzie OBrien","id":"218101335"},{"name":"Ellis Ward","id":"512376340"}]'; 
$friendlist = json_decode($jsonarray, true); 

$found = []; 
$notfound = []; 

foreach($friendlist as $friend){ 

    $friendid = $friend['id']; 
    $checkUserID = mysql_query("SELECT facebookid from users WHERE facebookid = '$friendid'"); 

    if (!$checkUserID) { 
     die('Query failed to execute for some reason'); 
    } 

    if (mysql_num_rows($checkUserId) > 0) { 
     $found[] = $id; 
    }else{ 
     $notfound[] = $id; 
    } 

} 


mysqli_close($con); 

?> 

這給了我:

查詢未能執行出於某種原因

是否有所作爲,我facebookid列是一個整數?

感謝

+1

利用in_array() –

+0

但我認爲我需要整個SQL值的數組?我很可能會將約500個數組與數以萬計的sql行進行比較。 – themartin

+0

它們是如何存儲在數據庫中的? – JAL

回答

0

這是爲我做的代碼。如果沒有你的幫助,不可能完成它。

<?php 
$con=mysql_connect("localhost","root",""); 
// Check connection 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

//json array is being posted to this file from another page 
$jsonarray = '[{"name":"Lizzie OBrien","id":"218101335"},{"name":"Ellis Ward","id":"512376340"}]'; 
$friendlist = json_decode($jsonarray, true); 


$found = []; 
$notfound = []; 

foreach($friendlist as $friend){ 

    $friendid = $friend['id']; 
    mysql_select_db("sabotage", $con); 
    $result = mysql_query("SELECT facebookid FROM users WHERE facebookid ='$friendid'", $con); 

    if (mysql_num_rows($result) > 0) { 
     $found[] = $friendid; 
    }else{ 
     $notfound[] = $friendid; 
    } 

} 

mysql_close($con); 

?> 
+0

毫無疑問,您的答案將起作用。但是,您正在循環中執行查詢,這意味着如果您有1000條記錄,則必須運行1000次查詢。那不是最佳方式。 –

1

我會怎麼做:

$idsfromdb; //grab all ids from the db, and put in array 
$idstobetested; //array of all ids you want to compare 
$found = []; 
$notfound[]; 

foreach($idstobetested as $id){ 
    if(in_array($id, $idsfromdb)){ 
    $found[] = $id; 
    }else{ 
    $notfound[] = $id; 
    } 
} 

但是:

看到您的評論後,如果您的數據庫有大量的記錄,而不是將它們全部選中並將其放入數組中。相反,遍歷您想要測試的id數組,然後在db上運行選擇查詢,如果它不返回false,則該值存在於db中,然後可以將id推送到找到的數組。

這可能是有用的:How to check if value already exists in MySQL database

+0

謝謝你。實際上,我無法從您提供的鏈接中獲得該代碼的工作。獲取「查詢因某種原因而無法執行」的錯誤,儘管我確定我的行和表名是正確的。這就是爲什麼我認爲它的東西,我會再次開始,並要求SO:P – themartin

+0

也許因爲我似乎混合mysqli查詢和MySQL查詢。將繼續調查。 – themartin

+0

@themartin如果你用你的代碼更新你的問題,我可以看看你喜歡嗎? –

0

你可能會找這個功能。

$jsonarray = '[{"name":"Lizzie OBrien","id":"218101335"},{"name":"Ellis Ward","id":"512376340"}]'; 
$friendlist = json_decode($jsonarray, true); 

$friendIds = array_map(create_function('$data', 'return $data["id"];'), $friendlist); 

// Will return all the matched records 
$sql1 = "SELECT yourcolumnname FROM yourtablename WHERE facebookid IN (".implode(',', $friendIds).")"; 

// Will return all the unmatched records 
$sql2 = "SELECT yourcolumnname FROM yourtablename WHERE facebookid NOT IN (".implode(',', $friendIds).")"; 
+0

謝謝你,但是作爲一個數組(從數據庫)將成千上萬,我不能這樣做。 – themartin

+0

根據所有可能的解決方案,您將不得不從數據庫中獲取所有Facebook ID。而是對所有ID執行查詢,您可以使用'in'查詢。 –

+0

我知道我對此很陌生,但我不認爲我有*從數據庫中獲取所有ID。這將是很多數據。根據我最近的編輯,我認爲我需要先檢查數據庫,然後採取行動。 – themartin