|
|
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть у меня запрос что-то типа этого: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. На выходе выборка в виде таблицы. Подскажите как написать к ней count мне надо узнать кол-во строк в этой выборке. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 20:38:48 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
EgorychMaster, Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 21:42:57 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Да. Спасибо, Cygapb-007 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 22:06:48 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Но это решение для общего случая. В частных случаях часто возможно оптимизировать получившийся запрос. Например, в данном случае, вероятно, можно выкинуть все LEFT JOIN-ы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 22:11:41 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Да. Спасибо большое, подумаю. Возможно какая либо связь несущественна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2015, 22:18:48 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
RTFM SQL_CALC_FOUND_ROWS RTFM FOUND_ROWS() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 08:51:13 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
AkinaRTFM SQL_CALC_FOUND_ROWS RTFM FOUND_ROWS()Этот вариант тоже имеет право на жизнь, но имеет свои подводные камни. Например, может потребовать много времени/ресурсов на больших резалтсетах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 10:52:10 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoftможет потребовать много времени/ресурсов на больших резалтсетах.А COUNT() что, потребует меньше? Всё равно выходной набор не залимитирован и будет получен полностью, количество записей по-любому посчитается - так зачем лишний раз движок гонять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 11:42:42 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Akinamiksoftможет потребовать много времени/ресурсов на больших резалтсетах.А COUNT() что, потребует меньше? Всё равно выходной набор не залимитирован и будет получен полностью, количество записей по-любому посчитается - так зачем лишний раз движок гонять?Да, COUNT() может потребовать меньше. Для COUNT() нужен только счетчик (помимо исполнения основного тела запроса). А для FOUND_ROWS() еще нужно где-то (думаю, во временной таблице) разместить все записи, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 12:52:12 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
EgorychMaster На выходе выборка в виде таблицы. Подскажите как написать к ней count мне надо узнать кол-во строк в этой выборке. Это очень неблагодарное занятие. При повторном выполнении самого запроса кол-во строк может измениться, а запрос с count() будет выполняться почти столько же времени, сколько и основной запрос. Поэтому всегда лучше просто выполнить весь запрос и просто посчитать его строчки в возвращённом наборе данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:02:38 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoftAkinaпропущено... А COUNT() что, потребует меньше? Всё равно выходной набор не залимитирован и будет получен полностью, количество записей по-любому посчитается - так зачем лишний раз движок гонять?Да, COUNT() может потребовать меньше. Для COUNT() нужен только счетчик (помимо исполнения основного тела запроса). А для FOUND_ROWS() еще нужно где-то (думаю, во временной таблице) разместить все записи, имхо. Несильно там будет меньше. DISTINCT делать всё равно надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:03:44 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
MasterZivmiksoftпропущено... Да, COUNT() может потребовать меньше. Для COUNT() нужен только счетчик (помимо исполнения основного тела запроса). А для FOUND_ROWS() еще нужно где-то (думаю, во временной таблице) разместить все записи, имхо. Несильно там будет меньше. DISTINCT делать всё равно надо.А DISTINCT-то откуда взялся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:06:11 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoft, Отсюда: автор Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:16:01 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
MasterZivmiksoft, Отсюда: автор Код: sql 1. А, тут да. Просто была процитирована моя фраза из другого контекста, поэтому я не сразу понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:18:49 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoftдля FOUND_ROWS() еще нужно где-то (думаю, во временной таблице) разместить все записи, имхо.Я думаю, что сведения, возвращаемые FOUND_ROWS(), хранятся в блоке данных текущего соединения с сервером. Во-первых, они являются динамическим свойством именно соединения, во-вторых, они корректны для открытого соединения даже тогда, когда между предыдущим запросом и запросом с использованием функции прошло много времени и кэш запросов сто раз промылся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 14:12:19 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Akinamiksoftдля FOUND_ROWS() еще нужно где-то (думаю, во временной таблице) разместить все записи, имхо.Я думаю, что сведения, возвращаемые FOUND_ROWS(), хранятся в блоке данных текущего соединения с сервером. Во-первых, они являются динамическим свойством именно соединения, во-вторых, они корректны для открытого соединения даже тогда, когда между предыдущим запросом и запросом с использованием функции прошло много времени и кэш запросов сто раз промылся.Это когда все записи отфетчены. Но когда все записи отфетчены FOUND_ROWS() имеет мало смысла, т.к. их можно было посчитать самостоятельно. Мне опасной представляется ситуация, когда записи еще не отфетчены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 14:28:28 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoftЭто когда все записи отфетчены. Но когда все записи отфетчены FOUND_ROWS() имеет мало смысла, т.к. их можно было посчитать самостоятельно. Мне опасной представляется ситуация, когда записи еще не отфетчены. Вообще-то FOUND_ROWS() имеет смысл только в том случае, когда в тексте предыдущего запроса наличествует SQL_CALC_FOUND_ROWS. А тогда похрен, сколько записей вынуто на клиента. Во всех остальных случаях выдаваемое функцией значение... ну скажем так - странненькое. Особенно оно забавное в процедуре внутри (и после) цикла, где фетчатся курсоры - хрен угадаешь, чё она даст, даже видя текст процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 15:41:53 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
Вот попробуй обосновать отмеченные значения: Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. PS. В строке сообщения об ошибке удалил один апостроф - иначе подсветка косячит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 15:47:54 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
AkinaВообще-то FOUND_ROWS() имеет смысл только в том случае, когда в тексте предыдущего запроса наличествует SQL_CALC_FOUND_ROWS.Не только. http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows In the absence of the SQL_CALC_FOUND_ROWS option in the most recent successful SELECT statement, FOUND_ROWS() returns the number of rows in the result set returned by that statement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 15:51:32 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoft , угу... только при выполнении ещё некоторых условий, стыдливо опущенных авторами мануала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 15:54:34 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
AkinaВот попробуй обосновать отмеченные значения:7 обосновать не могу. А с 8 все просто: http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_found-rows Beyond the cases described here, the behavior of FOUND_ROWS() is undefined (for example, its value following a SELECT statement that fails with an error). Возможно, что 7 подходит под undefined, а может и нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 16:05:30 |
|
||
|
Узнать количество строк в сложном запросе
|
|||
|---|---|---|---|
|
#18+
miksoftВозможно, что 7 подходит под undefinedУвы, нет - это значение как раз детерминированное. Значение FOUND_ROWS нулится процессом начала выполнения запроса на выборку - а курсор уже открыт, выгребаемые из него записи плюсят текущий счётчик, и похрен, что это "не тот" запрос. И с восьмёркой то же самое - выполнение запроса не начато, потому просто плюс один к текущему счётчику самим фактом отдачи чего-то (сообщение об ошибке - тоже запись). Совсем веселуха будет, если между селектом и запросом количества записей вставить запрос на добавление или там удаление - сами по себе они счётчик не изменяют, но если сработает триггер, внутри коего имеются выборки ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 16:51:52 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38992069&tid=1833017]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 423ms |

| 0 / 0 |
