powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записи с последней записью в группе или пусто (левый джойн)
11 сообщений из 11, страница 1 из 1
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945000
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE tlead
(
    idlead     int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    blive       tinyint         DEFAULT 1  NOT NULL COMMENT 'статус записи',
    strname varchar(250)                   NOT NULL  COMMENT 'название',
);

CREATE TABLE tlead_work
(
    idlead_work int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    tscreate    int(11) UNSIGNED DEFAULT unix_timestamp() NOT NULL COMMENT 'создано',
    blive       tinyint          DEFAULT 1                NOT NULL COMMENT 'статус записи',
    iidlead     int(11) UNSIGNED                          NOT NULL COMMENT 'fk: к лиду',
    strcomment  varchar(255)     DEFAULT ''               NOT NULL COMMENT 'комментарий к назначению',

    CONSTRAINT tleadwork_lead_fk  FOREIGN KEY (iidlead) REFERENCES tlead (idlead)
            ON UPDATE CASCADE ON DELETE CASCADE,
)


SELECT SQL_CALC_FOUND_ROWS l.idlead FROM tlead l
JOIN tlead_work lw ON lw.iidlead = l.idlead AND lw.idlead_work =
    (SELECT MAX(lw1.idlead_work) FROM tlead_work lw1 WHERE lw1.blive=1 AND lw1.iidlead = l.idlead)
WHERE (l.blive=1) AND ((lw.iidmanager IS NULL))
ORDER BY l.idlead
 LIMIT 0,120;



Результат этого запроса позже упихивается в запрос:

Код: sql
1.
2.
3.
4.
SELECT lw1.*, l1.iidfirm AS forFirm FROM tlead_work lw1
JOIN tlead l1 ON l1.idlead = lw1.iidlead
WHERE l1.idlead IN({$ids})
ORDER BY l1.tscreate DESC, lw1.tscreate DESC



вместо {$ids} через запятую. Разделено, чтобы получить сколько записей надо показать в пагинаторе и с какого места..

Сервер MariaDB 10.2 .. никакого подвоха не вижу (может забыл чего?) Но, страница по F5 отдает совершенно разные наборы второго запроса ..

Как так? Что я сделал не так? .. очень срочно..
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945007
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестил выборки из мускуля (там когда удалял лишнее, таблицыв реале большие) вынес поля .. tscreate - одинаково для обоих таблиц - время создания записи, а iidmanager - внешний ключ.

В общем, в консоли выборка одинакова, сделал штук 20 запросов ..

А вот это:
Код: php
1.
2.
3.
4.
5.
        $assumes = [];
        $stmt = Db::query($sql);
        if( $stmt ){ $assumes = $stmt->fetchAll(PDO::FETCH_ASSOC); }

        return $assumes;



Через раз возвращает РАЗНЫЙ результат .. что это?
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945052
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Через раз возвращает РАЗНЫЙ результат

Разный по - количеству записей? набору записей? их порядку?

Впрочем, странен самый начальный запрос - навылет непонятно отсутствие там DISTINCT.
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945055
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Сделал тестовый код. Записи переставляются местами через 1-3 запроса. При этом в консоли все выбирается как надо.

Рисую мультисорт на ПХП .. некогда заморачиваться. PHP 7.3 .. ни разу такого не было и вот опять снова. :(

DISTINCT там не нужен.

Подзапрос находит последнюю запись в группе и соответственно вытаскивает эту запись из дочернуй таблицы как результат JOIN.
Он тупо соединяется с первой таблицей и результат фильтруется есть ли значение заданного поля (iidmanager) в этой самой последней записи.
Соединение 1 к 1.

Мне просто надо было получить кол-во строк из главной таблицы, чтобы пагинатор не обрезал записи группы (второй), а вывел их все. Они все равно там сворачиваются в отдельный div ..

Проблема в том, что весь остальной код заточен именно на этот порядок следования - сортировка главной таблицы и повторная сортировка дочерней. Далее просто вывод в цикле "сменился главный номер" перестаем собирать внутренниq div, переходим к следующему объекту, наружу из div показываем последний дочерний.

.. а они "пляшут" промеж себя .. класс! то одно видим, то другое .. :)
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945070
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришлось выводить второе поле создания записи в набор и делать мультисортировку набора по двум ключам на ПХП ..

работает.
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945081
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Подзапрос находит последнюю запись в группе

Что, вот реально
Arhat109
Сервер MariaDB 10.2

это строго 10.2.0? или всё же 10.2.1 (или старше)?
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945085
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А там все оказалось ещё веселее.

Там стоит как кешатор редиска, и похоже выборка на ПХП идет через неё, поэтому в консоли все ровно. ПДО тут явно не при делах, как и сам мускуль. Конкретно версию не знаю 10.2 .. это точно. ПХП на серваке 7.2, у меня 7.3 - результат идентичен.

Я там обнаружил таких заплаток по пересортировке выборок .. в каждом отчете, что посмотрел .. оно явно не первый год так тут глючит .. отбой. поставил свою, очередную. :)
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945087
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
Конкретно версию не знаю 10.2
Вообще-то это критично. Если всё же 10.2.1 или старше - то доступны оконные функции и CTE, и можно не вертеть этот голимый бред с подзапросами.
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945089
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, доступны. Только в данном случае не поможет. Там явно давний косяк и они применяются .. с той же пересортировкой потом на пыхе. :(
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945093
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109
доступны. Только в данном случае не поможет.
Да нагадить с высокой колокольни на этот пыхов пересортир. Пусть гадит как умеет. Но хотя бы запросы сами по себе упростить - кстати, а как насчёт в структуру запроса прикопать ещё поле, которое никуда не выводится, но используется для досортировки (а на самом деле - для восстановления сортировки, благородно обгаженной пыхом) непосредственно в момент вывода?
...
Рейтинг: 0 / 0
Выборка записи с последней записью в группе или пусто (левый джойн)
    #39945105
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina, некогда. Я с этими оконными функциями ещё не "в пальцах" .. сделал как мне давно понятно .. а тут такая засада. Можно конечно сделать сборное доп. поле для правильной досортировки, но уже апнул, начальство в известность поставил .. пусть теперь у него голова болит, мне свою работу надо сделать. Реально цейтнот.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка записи с последней записью в группе или пусто (левый джойн)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]