Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie z JOIN dwie tabele
Forum PHP.pl > Forum > Bazy danych > MySQL
tabbi
Witam,

schemat tabel:

  1. NOTES -> id, name, client_id
  2. NOTES_DETALIS -> id, notes_id, sub_name


Połączenie między tabelami jest dzięki notes.id = notes_details.notes_id
Sprawa wygląda tak że np. do jednego rekordu NOTES może być przypisanych jeden bądź kilka rekordów w NOTES_DETAILS

Problem pojawia się przy zapytaniu:

  1. SELECT * FROM NOTES LEFT JOIN NOTES_DETAILS ON NOTES.id = NOTES_DETAILS.notes_id WHERE NOTES.client_id = 1 LIMIT 0, 4


gdyż źle brany jest pod uwagę limit jest on branyz całości a nie tylko z NOTES (gdy w NOTES_DETAILS MAMY 2 rekordy DO NOTES.id wtedy suma wychodzi 2 więc paginacja ogólnie nie będzie działać prawidłowo)
Jakieś sensowne rozwiązanie by móc limitować po NOTES.id a nie po całości, by paginacja dobrze działała.

Jakby ktoś bardziej optymalnie mógł napisać zapytanie (mój sposób działa lecz podwójne zagnieżdżenie w pierwszym selectie chciałbym jakoś móc ominąć )
  1. SELECT
  2. `t1_master`.`id`,
  3. `t2_master`.`job`
  4. FROM
  5. (
  6. (
  7. SELECT
  8. *
  9. FROM
  10. (
  11. SELECT
  12. *
  13. FROM
  14. `notes`
  15. ORDER BY `notes`.`date` DESC
  16. LIMIT 0,25
  17. )
  18. AS `t1_sub`
  19. )
  20. AS `t1_master`
  21. LEFT JOIN
  22. (
  23. SELECT
  24. *
  25. FROM
  26. (
  27. SELECT
  28. *
  29. FROM
  30. `notes_details`
  31. )
  32. AS `t2_sub`
  33. )
  34. AS `t2_master`
  35. ON `t2_master`.`note_id` = `t1_master`.`id`
  36.  
  37. )
mmmmmmm
  1. SELECT
  2. `t1_master`.`id`,
  3. `t2_master`.`job`
  4. FROM
  5. (
  6. SELECT
  7. *
  8. FROM
  9. `notes`
  10. ORDER BY `date` DESC
  11. LIMIT 0,25
  12. )
  13. AS `t1_master`
  14. LEFT JOIN
  15. `notes_details` AS `t2_master`
  16. ON `t2_master`.`note_id` = `t1_master`.`id`
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-2025 Invision Power Services, Inc.