it-swarm.com.ru

Выберите одну строку без повторяющихся записей

В таблице MySQL 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 раз.
Я хочу повторить только один раз . Возможно ли это?

15
Darius

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

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

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

36
Bohemian

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

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

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

ПРАВКА

так как ОП хочет также количество имен здесь мы идем:

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

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

14
Dalen

+ Правка 

SELECT name FROM info WHERE status = 1 ORDER BY id

в 

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

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

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

ВЫБЕРИТЕ имя, количество (имя) ОТ ИНФОРМАЦИИ ГДЕ статус = 1 ГРУППА ПО НАИМЕНИЮ ЗАКАЗАТЬ ПО id
6
cristian

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

2
ManseUK

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

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

Правка: Это важно отметить, когда вам нужно больше, чем один столбец, а значения уникальны для каждой строки, тогда DISTINCT не помогает.

1
Humphrey

$ 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 } ?>
0
Laud Randy Amofah

использовать 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>';
                }
0
SergeS

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

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++;
}       
0
Darkpore