2013-08-21 2 views
2

В PHP У меня есть MySQL запись, как показано нижеMySQL получать уникальные данные с запятыми значений

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

Я хочу, чтобы принести страну в раскрывающемся списке, данные хотят быть только дисплей уникальная страна не дублировать запись и запятая отдельные значения

Капля список утопить должен быть дисплей, как показано ниже

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> 

Это результат: обратите внимание, что Uk и Великобритания имеют упер и строчную проблему еще она уникальна.

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(), чтобы решить проблему дублирования uk. –

+0

1000 раз благодаря вам его очень помогает мне .. – user2009951

+0

@ user2009951 мое удовольствие, и, пожалуйста, если это поможет вам, пожалуйста, одобрите этот ответ, чтобы другие могли получить руководство в будущем. –

0

MySQL Query

SELECT country FROM table 

В PHP

Вы можете получить массив country.

теперь сверху используя mysql_fetch_assco у вас будет ассоциативный массив.

Выполнение imode для этих значений массива и их взорвать на.

теперь выполняют 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 заявление, чтобы получить уникальные страны.

Если, однако, вы не хотите этого делать, вы можете использовать explode, чтобы получить разделенные запятыми значения.

Допустим, у нас есть свои данные в массиве $ результатов, и вы хотите, чтобы ваши уникальные странам в массиве $ 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); 

дает ваш массив.

Смежные вопросы