|
|
|
| Итак делаю запрос:
$q = mysql_query("SELECT distinct(`pole1`), `pole2` FROM `table`;");
pole1 типа varchar(3)
pole2 типа varchar (255)
|
и при выводе содержимого выводит не уникальные значения а все
В случае когда делаю запрос таким образом
$q = mysql_query("SELECT distinct(`pole1`) FROM `table`;");
|
Проблем не возникает
=========================================================
аналогично делая запрос
$q = mysql_query("SELECT distinct(`pole1`), `pole2` FROM `table2`;");
pole1 типа varchar(3)
pole2 типа int (11)
|
Проблем не возникает
Объясните парадокс пожалуйста и как это обойти?
P.S Сразу оговорюсь что GROUP BY не подойдет в данном случае, так как я вывожу не только уникальные значения pole1 но и все значения pole2 | |
|
|
|
|
|
|
|
для: chexov
(29.08.2008 в 10:35)
| | Какие соображения? | |
|
|
|
|
|
|
|
для: chexov
(29.08.2008 в 19:46)
| | спецификатор DISTINCT обеспечивает уникальность строк результата, а вовсе не отдельных полей.
Да и как бы ему иначе-то?
А что Вы хотите получить - непонятно.
к примеру в таблице
какой ожидается результат и почему? | |
|
|
|
|
|
|
|
для: chexov
(29.08.2008 в 19:46)
| | Вы обязательно DISTINCT хотите воспользоваться? GROUP BY не подойдет? | |
|
|
|
|
|
|
|
для: chexov
(29.08.2008 в 10:35)
| | >так как я вывожу не только уникальные значения pole1 но и все значения pole2
Вы сами хоть, понимаете, что хотите? | |
|
|
|
|
|
|
|
для: AcidTrash
(30.08.2008 в 00:00)
| | абсолютно! объясняю подробнее: в таблице хранятся данные о пользователе, Pole1 содержит номера групп, а pole 2 содержит имена пользоваетелей(неповторяемые), так вот под одним номером группы может быть сколько угодно пользователей, поэтому и надо группы выводить уникальные, а пользователей всех подряд
===================================
pole 1 pole2
1 user1
1 user2
2 user3
3 user4
4 user5
4 user6
|
| |
|
|
|
|
|
|
|
для: chexov
(31.08.2008 в 07:49)
| | Вы не показали, каким должен быть вывод. | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 11:46)
| |
- user1
группа 1- user2
группа2 - user3
группа3 - user4
-user5
группа4 -user6
|
примерно так | |
|
|
|
|
|
|
|
для: chexov
(31.08.2008 в 13:33)
| | почему тогда не так:
группа 1- user1
- user2
группа2 - user3
группа3 - user4
группа4 -user5
-user6
|
?
Вопрос надо читать как "где в таблицах присутствует информация, указывающая, что один ответ верен, а другой - нет?"
И поскольку оба ответа равновозможны - чистым SQL Вашу задачу не решить.
SQL - (в большинстве ситуаций) язык запросов с детерминированным результатом, а не абы каким.
А для решения на уровне php вполне достаточно того вывода, что Вы привели в (31.08.2008 в 07:49) | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 13:43)
| | Есть, правда, вариант запроса, который вернет
1 | user1,user2
2 | user3
3 | user4
4 | user5,user6
|
Это агрегирующий запрос с применением функции GROUP_CONCAT()
Но у него есть недостаток... С большими объемами данных такой запрос справляется без гарантий.
Так что лучше всё же через php. | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 13:48)
| | Подскажите как через GROUP_CONCAT() и как через php если можно наглядно | |
|
|
|
|
|
|
|
для: chexov
(31.08.2008 в 18:10)
| |
SELECT pole1, GROUP_CONCAT(pole2 ORDER BY pole SEPARATOR ',')
FROM tbl
GROUP BY pole1
|
Что до php - показывайте код, который выведет (31.08.2008 в 07:49) - а там скорректируем. | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 18:32)
| |
<?php
$q = mysql_query("SELECT distinct(`pole1`), `pole2` FROM `table`;");
while ($arr = mysql_fetch_assoc($q))
{
echo "
<ul>
<li>'.$arr['pole1'].' группа
<ul>
<li> ".$arr['pole2']."</li>
</ul>
</li>
</ul>";
}
?>
|
что то типа того | |
|
|
|
|
|
|
|
для: chexov
(31.08.2008 в 18:56)
| |
<?php
$q = mysql_query("SELECT `pole1`, `pole2` FROM `table` ORDER BY pole1, pole2 ");
$curr = false;
echo "<ul>";
while ($arr = mysql_fetch_assoc($q))
{
$pole1 = htmlspecialchars($arr['pole1']);
$pole2 = htmlspecialchars($arr['pole2']);
if($curr !== $pole1)
{
if($curr !== false)
echo "</ul></li>\r\n";
echo "<li>$pole1<ul>";
$curr = $pole1;
}
echo "<li>$pole2</li>\r\n";
}
if($curr !== false)
echo "</ul></li>";
echo "</ul>\r\n";
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 18:32)
| |
ORDER BY pole SEPARATOR ','
|
по какому полю сортируем? по 1 или 2 и что такое ',' ? | |
|
|
|
|
|
|
|
для: chexov
(31.08.2008 в 18:58)
| | pole2
разделитель списка | |
|
|
|
|
|
|
|
для: Trianon
(31.08.2008 в 19:20)
| | PHP средствами все работает отлично! Спасибо огромное! | |
|
|
|