Ответ 1
Это довольно просто:
SELECT distinct name FROM info WHERE status = 1 ORDER BY id
Ключевое слово SQL DISTINCT
делает трюк.
В таблице 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 раз.
Я хочу повторить только один раз.
Возможно ли это?
Это довольно просто:
SELECT distinct name FROM info WHERE status = 1 ORDER BY id
Ключевое слово SQL DISTINCT
делает трюк.
попробуйте использовать это в качестве запроса:
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
в зависимости от того, что вам нужно
Измените
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
добавить GROUP BY name
в свой SQL-элемент - это приведет только к возврату одной из каждой записи из столбца name
использование Имя группы 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>';
}
Это работает для меня, возвращает имена таблиц для данной базы данных.
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++;
}
Скажем, вы отправляете массовые смс, и вы не хотите отправлять одно и то же сообщение два раза тому же парню Джону. Я обнаружил, что использование трюка GROUP BY и ORDER BY в то же время отлично работает. Но я не говорю, что это лучший способ. Вот как вы можете использовать его
SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY name
РЕДАКТИРОВАТЬ: Важно отметить, что когда вам нужно больше одного столбца, а значения уникальны для каждой строки, тогда DISTINCT не помогал.
$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 } ?>