1

Тема: MySQL ORDER BY значення поля1 + значення поля2

Допоможіть будь-ласка з запитом. Є три таблиці: об'єкти, лічильники, лічильники на об'єктах. В кожного лічильника є термін перевірки (кількість років). Дата перевірки складається: (квартал/рік). Роблю запит наступної перевірки лічильників - все гуд. Намагаюсь посортувати за датою перевірки - ПРОБЛЕМА.
Запит без сортування:

SELECT meters.type AS 'тип', meters.connectTC AS 'ввімкнення', meters_lte.numberMeter AS 'номер', CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear) AS 'ДП', CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear + meters.limit) AS 'наступна ДП', meters_lte.page AS 'сторінка'
FROM objects JOIN meters_lte USING (idObject)
    JOIN meters USING (idMeter)

Запит з сортуванням:

SELECT meters.type AS 'тип', meters.connectTC AS 'ввімкнення', meters_lte.numberMeter AS 'номер', CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear) AS 'ДП', CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear + meters.limit) AS 'наступна ДП', meters_lte.page AS 'сторінка'
FROM objects JOIN meters_lte USING (idObject)
    JOIN meters USING (idMeter)
ORDER BY meters_lte.testYear + meters.limit, meters_lte.testQuarter;

P.S. В Access проходило, в MySQL - ні.

2 Востаннє редагувалося fed_lviv (04.02.2015 10:48:47)

Re: MySQL ORDER BY значення поля1 + значення поля2

Щось вийшло, але занадто криве, можливо якось гарніше можна?

SELECT тип, ввімкнення, номер, ДП, CONCAT_WS('/', квартал, рік) AS 'наступна ДП', сторінка
FROM
(
    SELECT meters.type AS 'тип', meters.connectTC AS 'ввімкнення', meters_lte.numberMeter AS 'номер', CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear) AS 'ДП', meters_lte.testQuarter AS 'квартал', (meters_lte.testYear + meters.limit) AS 'рік', meters_lte.page AS 'сторінка'
    FROM objects JOIN meters_lte USING (idObject)
        JOIN meters USING (idMeter)
) AS table1
ORDER BY рік, квартал;

3 Востаннє редагувалося Анатолій (04.02.2015 11:48:40)

Re: MySQL ORDER BY значення поля1 + значення поля2

Дещо довгий код - не зручно читати/розбиратись. Можливо трохи перенось щоб можна було б читати зручніше.

SELECT meters.type AS 'тип', meters.connectTC AS 'ввімкнення', meters_lte.numberMeter AS 'номер', 
CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear) AS 'ДП', 
CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear + meters.limit) AS 'наступна ДП', meters_lte.page AS 'сторінка'
FROM objects JOIN meters_lte USING (idObject)
JOIN meters USING (idMeter)

Є три таблиці:
1. meters складається з колонок (idMeter, type, connectTC, limit)
2. meters_lte складається з колонок (numberMeter, testQuarter, testYear,page,idObject)
3. objects складається з колонок (idObject) (тут ще щось є? я не побачив)

І я слабо зрозумів відсортувати потрібно ВСІ поля трьох таблиць за .... чим? Датою перевірки? Чи потрібно вибрати лише певні поля, є необхідність і таких полях як page(сторінка) чи connectTC(ввімкнення)?

Дата перевірки (Рік, Квартал) = meters_lte.testYear + meters.limit, meters_lte.testQuarter, так?

Подякували: 0xDADA11C71

4

Re: MySQL ORDER BY значення поля1 + значення поля2

На рахунок таблиць все вірно.
Дата перевірки: (квартал/рік). Приклад: I/2010.
сортувати потрібно: - рік перевірки (остання перевірка+термін перевірки)
                             - квартал

5

Re: MySQL ORDER BY значення поля1 + значення поля2

ORDER BY meters_lte.testYear, meters_lte.testQuarter 

Власне, як у вас і було наведено.

6

Re: MySQL ORDER BY значення поля1 + значення поля2

Трішки не так, в мене було

ORDER BY meters_lte.testYear + meters.limit, meters_lte.testQuarter;

СОРТУВАТИ остання перевірка + термін перевірки, квартал.
В Access все було добре, а в MySQL прийшлося робити "кашу" див.вище

7

Re: MySQL ORDER BY значення поля1 + значення поля2

Що має дати запит у результаті?

8

Re: MySQL ORDER BY значення поля1 + значення поля2

SELECT 
meters.type AS 'тип', 
meters.connectTC AS 'ввімкнення', 
meters_lte.numberMeter AS 'номер', 
CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear) AS 'ДП', 
CONCAT_WS('/', meters_lte.testQuarter, meters_lte.testYear + meters.limit) AS 'наступна ДП', 
meters_lte.page AS 'сторінка'

ТАБЛИЦЯ:
- тип лічильника (LZQJ-XC)
- тип підключення лічильника (трансформаторне)
- заводський номер лічильника (00986342)
- остання перевірка //  квартал/рік (I/2010)
- наступна перевірка // квартал/рік останньої перевірки + термін перевірки (I/2016)
- сторінка в документації (125)

ORDER BY meters_lte.testYear + meters.limit, 
meters_lte.testQuarter;


СОРТУВАННЯ:
- рік останньої перевірки + термін перевірки
- квартал.
Та в принципі я вже запит написав, див.вище

9

Re: MySQL ORDER BY значення поля1 + значення поля2

Зі свого досвіду нагромадження подібних запитів можу порадити створити в'юшки:

CREATE VIEW sv_CheckMeters AS
    SELECT
    meters.type,
    meters.connectTC,
    meters_lte.numberMeter,
    meters_lte.testQuarter,
    meters_lte.testYear,
    meters.limit,
    meters_lte.page,
    meters_lte.testYear + meters.limit as testQY
FROM meters
JOIN meters_lte ON meters.??? = meters_lte.???; -- which fields are here?

CREATE VIEW sv_CheckMetersReport AS
    SELECT
    type AS 'тип',
    connectTC AS 'ввімкнення',
    numberMeter AS 'номер',
    CONCAT_WS('/', testQuarter, testYear) AS 'ДП',
    CONCAT_WS('/', testQuarter, testYear + limit) AS 'наступна ДП',
    page AS 'сторінка'
FROM sv_CheckMeters
ORDER BY testQY

10

Re: MySQL ORDER BY значення поля1 + значення поля2

Цікавий варіант, прийму на озброєння. Дякую.