|
|
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, есть таблица `users` Код: plaintext 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. И есть еще одна таблица, Код: plaintext 1. 2. 3. 4. 5. 6. 7. и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Эти первые две таблички связаны полем Код: plaintext Код: plaintext В таблице `users_in_branches` хранятся номера категорий к которым принадлежит пользователь, т.е. он может принадлежать сразу более чем к одной категории (т.е. сколько там будет категорий, тоже не ограничено). В таблице `branches` хранятся названия этих самых категорий на разных языках, т.е. поле `language_id` определяет каждую строку как категорию на указанном языке. Теперь самое главное. Как сделать выборку, так, чтобы вся нужная информация была в таком виде: Код: plaintext Т.е. все желательно одной строкой, чтобы в этой строке были те категории к которым принадлежит пользователь, учитывая то что заранее не известно к скольки категориям он принадлежит, и сколько категорий у нас есть... Если можете подскажите пожалуйста. Огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 08:46 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
вообще-то, обычно я делаю подобное в клиенте (php, ...) но, можно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 12:47 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
а заменив CONCAT(@list, ... на CONCAT_WS('', @list, ...) можно одним запросом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 13:09 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Начиная с 4.1 появилась агрегатная функция group_concat которая делает список из значений поля выборки. GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 14:15 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
4.1 ещё не stable, я бы пока не стал бы эту версию юзать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 15:04 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
4.1 это гамма. То что у других называется уже stable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2004, 15:06 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы. Но я решил сделать чуть по другому, НО тут получается так, что мой запрос выполняется 31 сек на P2-266/256Mb, 2.1 сек на Duron 1.4/512Mb, что неприемлимо... Вот запрос: Код: plaintext 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. Причем, что интересно, если убрать строки Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Так чем же они так тормозят эти строки? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2004, 23:30 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
покажи explain ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2004, 02:16 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3038 to server version: 4.0.18 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2004, 04:15 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
А вот структура таблиц `titles` : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Вроде все. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2004, 04:21 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
уважаемый, то что у вас данный запрос вообще выполняется - чудо (видимо мало записей) при join'ax очень желательно :)) использовать индексы, чтобы не получать следующее: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2004, 11:56 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Igor PavlenkoWelcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3038 to server version: 4.0.18 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот посмотрите. там где ALL - это простой перебор записей без всяких индексов. То есть к примеру emplyees ALL - означает что для каждой найденной записи languages и для каждой найденной company_types и тд (то есть практически для всех найденных записей всех таблиц) будет делаться полный просмотр всех записей в employees. Учитывая что таких таблиц c ALL несколько в explain, понятно, что такой запрос - будет тормозить. Причем по мере наполнения базы, тормоза будут расти в степенной зависимости. Вам сейчас надо - присмотреться поподробнее к таблицам, которые с ALL в explain, создать индексы, если индексы уже есть, но не используются, попробовать USE INDEX или FORCE INDEX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2004, 15:36 |
|
||
|
Как сделать выборку?
|
|||
|---|---|---|---|
|
#18+
Да, действительно, подобрав индексы получил быструю выборку. Правда я не уверен, что я подобрал оптимальное количество индексов :-), мне кажется что я немного перестарался. Есть ли смысл создавать такие индексы вместе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Т.е. создавать multiple-column index и одиночные индексы, которые ссылаются на одинаковые поля. (Выше это индекс group1 и скажем country_id , annual_turnover )? Огромное спасибо всем за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2004, 04:58 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1854718]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 510ms |

| 0 / 0 |
