【问题标题】:mysql fetch unique data with comma separated valuesmysql 获取具有逗号分隔值的唯一数据
【发布时间】:2013-08-21 08:17:02
【问题描述】:

在 PHP 中,我有如下 mysql 记录

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

我想在下拉列表中获取国家, 数据只想显示唯一的国家,而不是重复的条目和逗号分隔的值

下拉列表应该如下所示

 India
 Usa
 Germany
 Uk

【问题讨论】:

  • 我必须提供代码示例还是只是解释就足够了?
  • 重新设计(规范化)您的数据库以消除表中的逗号分隔值
  • @user2009951 请看一下我的回答,我为您提供了带有完整代码示例的解决方案。我快速在本地系统上编写代码及其工作

标签: php mysql


【解决方案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
)

【讨论】:

  • @user2009951 很高兴,如果这对您有帮助,请批准这个答案,以便其他人将来可以得到一些指导。
  • 如何批准这个答案?
【解决方案2】:

您可能应该考虑重新考虑存储数据的模型。因为您希望在 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】:

    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'
    );
    

    【讨论】:

      【解决方案4】:

      MySQL 查询

      从表中选择 group_concat(country)

      在php之后,

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

      给出你的数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 2010-10-22
        • 1970-01-01
        相关资源
        最近更新 更多