mysql使用逗号分隔值获取唯一数据

时间:2013-08-21 08:17:02

标签: php mysql

在PHP中,我有如下的mysql记录

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

我想在下拉中取国家, 数据希望只显示唯一的国家/地区而不是重复的条目和逗号分隔值

Drop drown list应显示如下

 India
 Usa
 Germany
 Uk

4 个答案:

答案 0 :(得分:1)

请参阅包含数据库名称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>

结果是:请注意英国和英国有大小写问题,否则它是唯一的。

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
)

答案 1 :(得分:0)

MySQL查询

SELECT country FROM table

PHP

您可以获得country数组。

现在使用mysql_fetch_assco你将拥有关联数组。

对这些数组值执行内爆,然后按,。

分解它们

现在在该阵列上执行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'
);

答案 2 :(得分:0)

您应该考虑重新考虑存储数据的模型。您可能希望在SQL语句中使用 DISTINCT 关键字来获取唯一的国家/地区。

如果您不想这样做,可以使用 explode 来获取逗号分隔值。

假设我们在数组$ results中有您的数据,并且您希望数组中的唯一国家/ $ 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;
        }
    }
}

答案 3 :(得分:0)

MySQL查询

select group_concat(country) from table

之后在php中,

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

给你的数组。