Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Подсчитать сколько раз встречается каждая из строк.

Сообщения:  [1-10]   [11-13] 

 
 автор: Eugene77   (06.11.2009 в 17:32)   письмо автору
 
   для: Trianon   (05.11.2009 в 21:08)
 

>так сделайте табличку с этим отношением (связующую таблицу, заполненную множествами строк)
У меня, в принципе, есть таблица, только как такой запрос сочинить чтобы её использовать?
Таблица имеет такой формат
CREATE TABLE `sets` 
id INT,
`string` VARCHAR,
`key` VARCHAR
)

Я делаю как-то неправильно:
SELECT string, count(*) AS times FROM strings
WHERE string IN (
SELECT string FROM sets WHERE `key` IN('keystr1','keystr2'
)
GROUP BY string

Это позволяет, конечно, получить сколько раз встречается каждая из строк в таблице strings, но
'keystr1','keystr2' - как раз и есть задающие строки по которым требуется суммировать.
Но как написать запрос чтобы группировка по ним получилась, что-то не могу сообразить.

Надо чтобы, если в таблице string нет какого-то из слов задающей таблицы sets, то не надо, чтобы слово исчезало, просто чтобы в выдаче количество указывалось 0.

  Ответить  
 
 автор: Trianon   (05.11.2009 в 21:08)   письмо автору
 
   для: Eugene77   (05.11.2009 в 20:50)
 

группировать - Вы имеете в виду.
так сделайте табличку с этим отношением (связующую таблицу, заполненную множествами строк) и обрабатывайте его внешним GROUP BY сколько влезет как требуется.
Хотя без ключей всё это будет тормозить изрядно.

  Ответить  
 
 автор: Eugene77   (05.11.2009 в 20:50)   письмо автору
 
   для: Trianon   (05.11.2009 в 20:08)
 

>И что тут мешает дописать LIMIT ?

Тут ничего не мешает.
Но мне нужно сортировать не по количеству каждого отдельного слова, а
по суммарному повторению слов в каждом из множеств

  Ответить  
 
 автор: Trianon   (05.11.2009 в 20:08)   письмо автору
 
   для: Eugene77   (05.11.2009 в 19:59)
 

вообще-то чтуть по-другому:
SELECT string, count( string ) 
  FROM strings 
  WHERE string IN(..........)
  GROUP BY string

И что тут мешает дописать LIMIT ?

  Ответить  
 
 автор: Eugene77   (05.11.2009 в 19:59)   письмо автору
 
   для: Trianon   (05.11.2009 в 19:04)
 

>вообще-то я отвечал не на первый пост в теме.
>в структурном режиме форума это хорошо видно.

Тогда - да. Такое решение возможно:

SELECT string, count( string ) 
FROM strings 
GROUP BY string
WHERE string IN(..........)


Потом в PHP разбивать на группы.
Это как бы, на первый взгляд, решает задачу, но тогда становится непонятно как делать постраничный вывод.

К запросу MySQL легко добавить LIMIT, а получать весь массив в в PHP, потом его суммировать по группам и сортировать, затем разбивать на страницы, и выводить лишь нужную страницу.
Может быть слишком долго.

Но так и сделаю, если других идей нет.
Спасибо!

  Ответить  
 
 автор: Trianon   (05.11.2009 в 19:09)   письмо автору
 
   для: Eugene77   (05.11.2009 в 18:43)
 

>Это я не понял как относится к моей задаче:
>>WHERE string BETWEEN ... AND ...

Просто, возможно, таким образом отделить нужные записи от ненужных выйдет более оптимально.
Все же вхождение в диапазон и вхождение в список - задачи разного порядка сложности.
Но если нет, так нет, мне не жалко. Мысль предлагалась одна из.
Заметьте - мысль. Не решение.

  Ответить  
 
 автор: Trianon   (05.11.2009 в 19:04)   письмо автору
 
   для: Eugene77   (05.11.2009 в 18:43)
 

вообще-то я отвечал не на первый пост в теме.
в структурном режиме форума это хорошо видно.

  Ответить  
 
 автор: Eugene77   (05.11.2009 в 18:43)   письмо автору
 
   для: Trianon   (05.11.2009 в 15:59)
 

>WHERE string IN (... ) 

Так я могу получить одним запросом общее количество строк, входящих в заданное множество
SELECT count(*) WHERE string IN('st1','st2'...............
И так далее.

Проблема в том, что таких множеств больше десятка, а запрос хотелось бы сделать один и получить по каждому множеству отдельный ответ.

Это я не понял как относится к моей задаче:
>WHERE string BETWEEN ... AND ...

  Ответить  
 
 автор: Trianon   (05.11.2009 в 15:59)   письмо автору
 
   для: Eugene77   (05.11.2009 в 15:49)
 

WHERE string IN (... )
WHERE string BETWEEN ... AND ...
нет?

  Ответить  
 
 автор: antf   (05.11.2009 в 15:54)   письмо автору
 
   для: Eugene77   (05.11.2009 в 15:49)
 

А order by и limit к этому запросу нельзя приставить?

  Ответить  

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования