Labutin
@Labutin
Web-разработчик

Как написать MySQL запрос, чтобы строки с одинаковым значением поля шли подряд, но не отсортированными?

Попустим есть таблица:
Field1 Name
------------
1 Вася
2 Петя
1 Оля
3 Олег
2 Коля

Хочу написать запрос, который выведет ВСЕ строки так, чтобы строки с одинаковым Field1 шли подряд, НО по Field1 не были отсортированы (пусть будет случайный порядок)
Например, вывод может быть таким:
Field1 Name
------------
2 Петя
2 Коля
1 Вася
1 Оля
3 Олег

Еще раз: важно, чтобы строки с одинаковым Field1 шли подряд, но сами значения Field1 были в случайном порядке.

В реальной таблице 80 миллионов строк, у которых разных значений Field1 примерно 2000.
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 2
svd71
@svd71
Квазисортировку практически невозможно сделать ни в одной СУБД. Точнее сказать - можно сделать то, что вы правильно сформулируете.

Пробуйте сортировку с мнимыми вычисляемыми полями:
Select * from table1 
order by cast(field1 as varchar(5))+field2
Ответ написан
@dk-web
таким запросом не умею.. но результат достигнут - правда на 10 именах)
$q="SELECT DISTINCT field1 FROM names ";
         $res=mysql_query($q) or die ('о'.mysql_error());
          $data=array();
          while ($row=mysql_fetch_assoc($res)) {
                $data[$row['field1']]=$row['field1'];
          }  
                
        $keys=array_keys($data); //массив уникальных ключей

        shuffle($keys); //случайный порядок

        foreach ($keys as $key=>$value) {
       
        $q="SELECT * FROM names WHERE field1=".$value."";
        
        $res=mysql_query($q) or die ('о'.mysql_error());
          $data_names=array();
          
          while ($row=mysql_fetch_assoc($res)) {
                $data_names[]=$row['name'];
          }  
          $data_need[$value]=$data_names;
}


echo '<pre>';
print_r ($data_need);
echo '</pre>';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы