2013-08-21 96 views
2

在PHP中唯一的數據,我有一個像下面MySQL的取得與逗號分隔值

id country 
1 India 
2 Usa,Germany 
3 India,usa 
4 Germany,Uk,India 
5 Uk 

我想在降獲取的祖國失望MySQL的記錄, 數據想只顯示獨特的國家不重複錄入和逗號分隔值

掉落淹沒列表應該是這樣的顯示屏下方

India 
Usa 
Germany 
Uk 
+0

我是否必須爲您提供代碼示例或僅僅解釋就足夠了? –

+0

重新設計(標準化)您的數據庫,以消除表 –

+0

@ user2009951中的逗號分隔值請看看我的答案我給你提供了完整的代碼示例解決方案。我很快在本地系統上編寫代碼,其工作 –

回答

1

請參閱與databasse名test和表table1完整工作示例:

<?php 
$mysqli = new mysqli("localhost", "root", "", "test"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

    $query = "SELECT * FROM table1"; 
$result = $mysqli->query($query); 

while($row = $result->fetch_row()) { 
    $rows[]=$row['1']; //getting aal country 
} 


/* free result set */ 
$result->free(); 

/* close connection */ 
$mysqli->close(); 
?> 

<form> 
<select> 
<?php foreach ($rows as $mod){?> 
<option value="<?php echo $mod?>"><?php echo $mod?></option> 
<?php }?> 
</select> 
</form> 
<?php $all_country = array(); 
foreach ($rows as $mod){ 
    $arr = explode(',', $mod); 
    foreach($arr as $row){ if(trim($row) != '') 
     $all_country[] = trim($row); 
     } 
    } 
    $input = array(); 
    $input = array_unique($all_country); 
?> 
    <form> 
<select> 
<?php foreach ($input as $mod){?> 
<option value="<?php echo $mod?>"><?php echo $mod?></option> 
<?php }?> 
</select> 
</form> 

這是結果:注意,英國和英國有UPER和其他小寫問題它是獨一無二的。

Simple data: 
Array 
(
    [0] => India 
    [1] => Usa 
    [2] => Germany 
    [4] => usa 
    [6] => Uk 
    [8] => UK 
) 
unique country; 


Array 
(
    [0] => India 
    [1] => Usa 
    [2] => Germany 
    [4] => usa 
    [6] => Uk 
    [8] => UK 
) 
+0

你可以使用strtoupper()來解決英國的重複問題。 –

+0

1000倍感謝你對我的幫助.. – user2009951

+0

@ user2009951我的榮幸,如果這對你有幫助,請批准這個答案,以便其他人可以在將來得到一些指導。 –

0

MySQL查詢

SELECT country FROM table 

PHP

你可以得到的country陣列。

現在使用mysql_fetch_assco您將擁有關聯數組。

在該數組值上執行implode,然後用它們爆炸它們。

現在對該數組執行array_unique,您將擁有數組。

$queriedResult = array 
(
    'India', 
    'Usa,Germany', 
    'India,usa', 
    'Germany,Uk,India', 
    'Uk' 
); 

$result = implode(',',$queriedResult); 

$result那之後將是如下。

$result = 'India,Usa,Germany,India,usa,Germany,Uk,India,Uk'; 

現在我們在,之上爆炸字符串。

$newArray = explode(',',$result); 

,我們將有

$newArray = array 
(
    'India', 
    'Usa', 
    'Germany', 
    'India', 
    'usa', 
    'Germany', 
    'Uk', 
    'India', 
    'Uk' 
); 

現在執行最後一步。

$finalArray = array_unique($newArray); 

產生。

$finalArray = array 
(
    'India', 
    'Usa', 
    'Germany' 
    'Uk' 
); 
+0

看到我編輯的答案,你會有更好的主意。 –

0

你或許應該考慮重新考慮你存儲在您的數據模型。當你想使用DISTINCT 關鍵字在SQL語句中獲得獨特的國家。

如果您不想這樣做,您可以使用爆炸以獲得逗號分隔值。

假設我們有數組$結果你的數據,你想你的唯一的國家在數組中$ unique_countries

foreach($results as $result){ 
    $result_countries = explode(',',$result['country']); 
    foreach($result_countries as $country){ 
     if(!in_array($country,$unique_countries)){ 
      $unique_countries[] = $country; 
     } 
    } 
} 
0

MySQL查詢

select group_concat(country) from table

後,在PHP中,

$duplicateCountry = explode(',',$sqlResult); 
$duplicateCountry = array_unique($duplicateCountry); 

給出你的數組。