Автор Тема: Задачка не для слабых ....  (Прочитано 8346 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Задачка не для слабых ....
« : 19 Августа 2002, 17:16:18 »
Есть база данных MySQL , в ней девять таблиц , в каждой таблице есть столбец вида
zodiac enum(\\"0\\",\\"1\\",\\"2\\",\\"3\\",\\"4\\",\\"5\\",\\"6\\",\\"7\\",\\"8\\",\\"9\\",\\"10\\",\\"11\\",\\"12\\")(на слеши не обращайте внимания , Php виновата)-т.е имеется виду 12 знаков зодиаков и один пустой, и соответственно пользователь добавляет свое имя и указывает свой знак зодиака... т. е. получается запись вида
сергей-7 (оба значения в разных столбцах конечно, 7 -иммеется в виду "скорпион") но дело не в этом..... здесь все как обычно и все понятно...
Но надо создать такой запрос который показывал бы сколько записей соответсвуют каждому знаку зодиака из всех девяти таблиц.....
$sql="
SELECT zodiac,COUNT(*) AS count FROM tabl1
GROUP BY zodiac ORDER BY count  ASC";
- нодо что-то наподобие этого запроса , но сразу по 9 таблицам:insane:
 - On-line сервис.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #1 : 19 Августа 2002, 17:25:07 »
listopad
боюсь что одним запросом не обойдешься :(
Делай выборку из таблиц и записывай во временную, а потом результирующую выборку сделаешь по временной таблице.
На Машине Тьюринга далеко не уедешь.

Ganer

  • Гость
Задачка не для слабых ....
« Ответ #2 : 20 Августа 2002, 10:22:44 »
А что у тебя все 9 таблиц одного формата ???? Интересно бы услышать причину (она наверника веская ;) )

А в MySQL нельзя так писать ?

select count(*)  from (
     select ...
     UNION
     select ...
     UNION
) group by ...

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Задачка не для слабых ....
« Ответ #3 : 20 Августа 2002, 10:45:52 »
Цитировать
А в MySQL нельзя так писать ?

Только в 4, а о нём с пол-годика мона не вспоминать.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #4 : 20 Августа 2002, 11:26:25 »
Ganer
UNION есть в 4.0, только  насколько я помню по стандарту SQL 99 GROUP BY на всё выражение там кажется не применяется, только на каждый из SELECT\'ов
так что наверное UNION все равно не подойдет :-)
На Машине Тьюринга далеко не уедешь.

Оффлайн Oak

  • Дерево
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1481
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #5 : 21 Августа 2002, 01:17:02 »
А зачем вам вообще это в запросе делать?
Выбрать все(только этот слолбец) и посчитать скриптом :)
Надеюсь там не миллион записей?

Или 12 запросов. - посмотри что по времени быстрее
[основной броузер - SeaMonkey] Netscape Communicator 4 - is the best :) // see sources

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Задачка не для слабых ....
« Ответ #6 : 21 Августа 2002, 12:03:32 »
Временная таблица это конечно хорошо, вот что у меня получается ......
zodiac   count
0---------25
0---------14
4---------8
6---------14
6---------4
9---------9
10-------85
10-------64
10-------12
11-------6
12-------1

Но а как теперь сделать результирующую выборку.......по знаку зодиака... ???
 - On-line сервис.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #7 : 21 Августа 2002, 12:11:18 »
select zodiac, sum(count) from table_name group by zodiac

на практике не проверяла, но должно работать :)
На Машине Тьюринга далеко не уедешь.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Задачка не для слабых ....
« Ответ #8 : 21 Августа 2002, 12:28:28 »
Все работает......... Спасибо !!!
 - On-line сервис.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #9 : 21 Августа 2002, 12:29:28 »
Вообще-то Ганер еще неделю назад сказал решение.
сделать вместо 9 таблиц - одну.
Но мы ведь не ищем легких путей.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Задачка не для слабых ....
« Ответ #10 : 21 Августа 2002, 12:36:08 »
Цитировать
сделать вместо 9 таблиц - одну.

Не всегда есть такая возможность.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн listopad

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.loadfile.ru
Задачка не для слабых ....
« Ответ #11 : 21 Августа 2002, 12:50:43 »
Все дело в скорости......
Дело в том что все пользователи делятся на 9 типов........и засовываются в соответствующую таблицу....., и в последствие , если надо отобрать участников одного типа сразу выбирается конкретная таблица , а  не насилутся одна оператором WHERE  .......--- это приводит к дополнительным запросам...... , а главное СКОРОСТЬ  !!!!
Но может ....я в чем то и не прав....
Другое дело что все эти девять можно засунуть в одну временную...... а  потом ее обработать..... Но опять проблема с памятью , если будет несколько тысяч записей в итоге.....
 - On-line сервис.

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #12 : 21 Августа 2002, 13:10:47 »
listopad
ты можешь создать одну таблицу со всеми типа и в таблице гороскопов будет просто еще один столбец, где будет указан к какому типу пользователей относится ...
если у тебя этот столбез будет проиндексирован, то WHERE index_field=constant работает _очень_ быстро.

а вобще все зависит от твоих запросов, частоты и т.д.
На Машине Тьюринга далеко не уедешь.

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Задачка не для слабых ....
« Ответ #13 : 21 Августа 2002, 14:06:19 »
Цитировать
Все дело в скорости......

Верняк.
Цитировать
если у тебя этот столбез будет проиндексирован, то WHERE index_field=constant работает _очень_ быстро.

Не верно. Вернее не всегда.
Цитировать
а вобще все зависит от твоих запросов, частоты и т.д.

Верняк.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Задачка не для слабых ....
« Ответ #14 : 21 Августа 2002, 14:06:24 »
Гы!
Он делает временную таблицу и говорит о скорости! :-))))

Оператор where не насилует таблицу.
Это все равно, что сказать, что ложка насилует тарелку.
Ты бы хоть померил скорость, прежде, чем писать глупости. или книжку какую умную прочел.

 

Sitemap 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