Подтвердить что ты не робот

Выберите одну строку без дубликатов записей

В таблице mysql info у меня есть:

Идентификатор, имя, город, дата, статус

Я хочу выбрать все имена из "info" Выполнение запроса

$query = mysql_query("SELECT name FROM info WHERE status = 1 ORDER BY id") 
         or die(mysql_error());

while ($raw = mysql_fetch_array($query)) 
{
  $name = $raw["name"];
  echo ''.$name.'<br>';
}

Ну, результат состоит в том, что он возвращает все записи. Я хочу повторить все записи без дубликатов.

Говоря: под сырым "именем" мы ввели имя "Джон" 10 раз.
Я хочу повторить только один раз. Возможно ли это?

4b9b3361

Ответ 1

Это довольно просто:

SELECT distinct name FROM info WHERE status = 1 ORDER BY id

Ключевое слово SQL DISTINCT делает трюк.

Ответ 2

попробуйте использовать это в качестве запроса:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id

чтобы получить различные имена

или как другое предлагаемое использование GROUP BY

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

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

ИЗМЕНИТЬ

поскольку OP хочет также количество имен, которые мы здесь:

SELECT name,COUNT(id) AS n_names
FROM info WHERE status = 1
GROUP BY name
ORDER BY name

вы можете ORDER BY name или n_names в зависимости от того, что вам нужно

Ответ 3

Измените

SELECT name FROM info WHERE status = 1 ORDER BY id

to

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

Обратите внимание, что был добавлен GROUP BY. Подробнее о группе http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

Edit:
для имени с числом явлений попробуйте

SELECT name, count(name) FROM info WHERE status = 1 GROUP BY name ORDER BY id

Ответ 4

добавить GROUP BY name в свой SQL-элемент - это приведет только к возврату одной из каждой записи из столбца name

Ответ 5

использование   Имя группы GROUP BY утверждение

$query = mysql_query("SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id") or      die(mysql_error());

while ($raw = mysql_fetch_array($query)) {
                $name = $raw["name"];
                echo ''.$name.'<br>';
                }

Ответ 6

Это работает для меня, возвращает имена таблиц для данной базы данных.

my $sql="select distinct table_name from COLUMNS  where table_schema='$database'"
my $sth = $dbht->prepare( $sql )
      or die "Cannot prepare SQL statement: $DBI::errstr\n";
  $sth->execute
      or die "Cannot execute SQL statement: $DBI::errstr\n";

  if ($DBI::err){

    $msg= "Data fetching terminated early by error: $DBI::errstr";

}


while (@col=$sth->fetchrow_array()){
    $table[$i]=$col[0];
    $i++;
}       

Ответ 7

Скажем, вы отправляете массовые смс, и вы не хотите отправлять одно и то же сообщение два раза тому же парню Джону. Я обнаружил, что использование трюка GROUP BY и ORDER BY в то же время отлично работает. Но я не говорю, что это лучший способ. Вот как вы можете использовать его

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY name

РЕДАКТИРОВАТЬ: Важно отметить, что когда вам нужно больше одного столбца, а значения уникальны для каждой строки, тогда DISTINCT не помогал.

Ответ 8

$sql = "SELECT DISTINCT name FROM status = 1 GROUP BY name ORDER BY name";

$query = mysqli_query($conn,$sql);
<?php while ( $fire=mysqli_fetch_array($query)) { ?>
<h4><?php echo $query['name']; ?><br></h4>
<?php } ?>