Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Left join z limitem wyników
Vercio
post 2.01.2022, 18:28:08
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 16.07.2010

Ostrzeżenie: (0%)
-----


Witam,

Mam mały problem z ustawieniem limitu w swoim zapytaniu,

  1. SELECT
  2. `tag`.`name` AS name
  3. CONCAT('[',
  4. GROUP_CONCAT(IF(`frame`.`title` IS NOT NULL,
  5. JSON_OBJECT('title', `frame`.`title`),
  6. NULL)),
  7. ']') AS historyFrames
  8. FROM
  9. `_related_tags_articles` AS `tagArticle`
  10. INNER JOIN
  11. `tags` AS `tag` ON `tagArticle`.`tag_id` = `tag`.`id`
  12. LEFT JOIN
  13. `_related_tags_frames` AS `tagFrame` ON `tagFrame`.`tag_id` = `tag`.`id`
  14. LEFT JOIN
  15. `historyFrames` AS `frame` ON `tagFrame`.`frame_id` = `frame`.`id`
  16. AND `frame`.`active` = 1
  17. WHERE
  18. `tagArticle`.`article_id` = 5
  19. GROUP BY `tag`.`id`;


chciałbym w tym joinie ograniczyć wynik znalezionych do trzech

  1. LEFT JOIN
  2. `historyFrames` AS `frame` ON `tagFrame`.`frame_id` = `frame`.`id`
  3. AND `frame`.`active` = 1


niesty żaden ze znalezionych przykładów w sieci nie działa. Pytanie czy ktoś ma jakąś propozycję rozwiązania problemu.

dzięki
Go to the top of the page
+Quote Post
trueblue
post 2.01.2022, 18:56:42
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Zamień ten JOIN na taki, który używa podzapytania.
  1. LEFT JOIN (SELECT .... LIMIT 0,3) AS hf ON ...


--------------------
Go to the top of the page
+Quote Post
Vercio
post 2.01.2022, 19:04:05
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 16.07.2010

Ostrzeżenie: (0%)
-----


już próbowałem i wyszło z miernym skutkiem, zamiana na takie coś:

  1. (SELECT * FROM `historyFrames` LIMIT 0,3) AS `frame` ON `tagFrame`.`frame_id` = `frame`.`id`


pobiera pierwsze 3 wiersze i zawsze zwraca NULL ponieważ ID się nie zgadzają

także próbowałem z LATERAL

  1. LATERAL (SELECT * FROM `historyFrames` WHERE `id` = `tagFrame`.`frame_id` LIMIT 0,3) AS `frame` ON `tagFrame`.`frame_id` = `frame`.`id`


zwraca mi wszystkie znalezione wyniki i ignoruje wskazany limit
Go to the top of the page
+Quote Post
trueblue
post 2.01.2022, 19:14:34
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


W tym podzapytaniu złącz tylko tabele, które w wyniku dadzą 3 id.
Bez żadnego LATERAL.

Chyba, że okaże się, że musisz w ten sposób połączyć praktycznie wszystkie tabele, które są w głównym zapytaniu.

Ten post edytował trueblue 2.01.2022, 19:15:12


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 17:55