Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Left join z limitem wyników
Forum PHP.pl > Forum > Bazy danych > MySQL
Vercio
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
trueblue
Zamień ten JOIN na taki, który używa podzapytania.
  1. LEFT JOIN (SELECT .... LIMIT 0,3) AS hf ON ...
Vercio
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
trueblue
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.