2013-08-21 92 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); 

给出你的数组。