Я хочу иерархический порядок в моем выводе, но не знаете как? - PullRequest
0 голосов
/ 20 октября 2018

Я хочу в выводе иерархический порядок, например, так:

Мои данные:

Name            | Cost   | Level 
----------------+--------+------
Car1            | 2000   |   1
 Component1.1   | 3000   |   2
  Component1.2  | 2300   |   3
Computer2       | 5000   |   1
 Component2.1   | 2000   |   2
  Component2.2  | Null   |   3

Вывод: Показать все те данные, которые имеютденьги в нем и упорядочите их по уровню, что-то вроде сначала 1, затем 2, затем 3 и после этого снова начните с 1.

Name              | Level
------------------+------
Car1              |   1
 Component1.1     |   2
  Component1.2    |   3
Computer          |   1
 Component2.1     |   2

Что делает ORDER BY, так это:

Name            | Level
----------------+------
Car1            |   1
Computer1       |   1
Component1.1    |   2
Component2.1    |   2
Component1.2    |   3
Component2.2    |   3 

Я попробовал функцию CONNECT BY PRIOR, и она не сработала

 SELECT Name, Level
   FROM Product
CONNECT BY PRIOR Level;

Ответы [ 4 ]

0 голосов
/ 20 октября 2018

До сих пор неясно, действительно ли вы этого ожидаете.Из вашего набора данных мне кажется, что вы хотите численно упорядочить компоненты, основываясь на каком-то номере версии в конце компонента.Если это действительно то, что вам нужно, то вы можете игнорировать нечисловые символы в имени и порядке чистых чисел в конце строки (с обязательным предложением where).

ORDER BY REPLACE ( name, TRANSLATE(name,' .0123456789',' '),''); 

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

Может возникнуть проблема, если у вас есть такие компоненты, как component2_name1.2и т.д., которые могут нарушить эту логику, для которой вам может потребоваться REGEXP, чтобы идентифицировать требуемый шаблон.Но это не так из ваших данных, и я предположил, что это так, и вы можете уточнить, если это не то, что вы всегда можете иметь в своем наборе данных.

Вот демонстрация полученного результатадля ваших образцов данных.

Демо

Это будет работать, если числовой символ всегда является допустимым десятичным знаком и имеет только одну десятичную точку.Если у вас сложная система управления версиями, например, скажем 1.1.8, 2.1.1 и т. Д., Она требует гораздо более сложного упорядочения поверх REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'').

В таких сообщениях вы найдете такие примеры Здесь

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

0 голосов
/ 20 октября 2018

Вы можете использовать ниже одного

SELECT Name, Level
FROM Auction
ORDER BY Name, Level
WHERE Money!='Null' ;

Выполнение заказа по имени будет печатать результат в иерархическом порядке, но если в нем есть столбец с именем parent id, его будет проще показать.

0 голосов
/ 20 октября 2018

Я предлагаю это для вас:

SELECT Name, Level FROM Product ORDER BY Name, Level WHERE Money!='Null' ASC;

Я хочу, чтобы это помогло вам, брат

0 голосов
/ 20 октября 2018

В MySQL вы обычно используете 'order by'.Поэтому, если вы хотите упорядочить в строке «уровень» таблицы, ваш синтаксис будет выглядеть примерно так:

SELECT * FROM items ORDER BY level ASC

Вы можете использовать ASC (восходящий) или DESC (нисходящий).

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...