|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 20:50)
| | группировать - Вы имеете в виду.
так сделайте табличку с этим отношением (связующую таблицу, заполненную множествами строк) и обрабатывайте его внешним GROUP BY сколько влезет как требуется.
Хотя без ключей всё это будет тормозить изрядно. | |
|
|
|
|
|
|
|
для: Trianon
(05.11.2009 в 20:08)
| | >И что тут мешает дописать LIMIT ?
Тут ничего не мешает.
Но мне нужно сортировать не по количеству каждого отдельного слова, а
по суммарному повторению слов в каждом из множеств | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 19:59)
| | вообще-то чтуть по-другому:
SELECT string, count( string )
FROM strings
WHERE string IN(..........)
GROUP BY string
|
И что тут мешает дописать LIMIT ? | |
|
|
|
|
|
|
|
для: Trianon
(05.11.2009 в 19:04)
| | >вообще-то я отвечал не на первый пост в теме.
>в структурном режиме форума это хорошо видно.
Тогда - да. Такое решение возможно:
SELECT string, count( string )
FROM strings
GROUP BY string
WHERE string IN(..........)
|
Потом в PHP разбивать на группы.
Это как бы, на первый взгляд, решает задачу, но тогда становится непонятно как делать постраничный вывод.
К запросу MySQL легко добавить LIMIT, а получать весь массив в в PHP, потом его суммировать по группам и сортировать, затем разбивать на страницы, и выводить лишь нужную страницу.
Может быть слишком долго.
Но так и сделаю, если других идей нет.
Спасибо! | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 18:43)
| | >Это я не понял как относится к моей задаче:
>>WHERE string BETWEEN ... AND ...
Просто, возможно, таким образом отделить нужные записи от ненужных выйдет более оптимально.
Все же вхождение в диапазон и вхождение в список - задачи разного порядка сложности.
Но если нет, так нет, мне не жалко. Мысль предлагалась одна из.
Заметьте - мысль. Не решение. | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 18:43)
| | вообще-то я отвечал не на первый пост в теме.
в структурном режиме форума это хорошо видно. | |
|
|
|
|
|
|
|
для: Trianon
(05.11.2009 в 15:59)
| |
Так я могу получить одним запросом общее количество строк, входящих в заданное множество
SELECT count(*) WHERE string IN('st1','st2'...............
| И так далее.
Проблема в том, что таких множеств больше десятка, а запрос хотелось бы сделать один и получить по каждому множеству отдельный ответ.
Это я не понял как относится к моей задаче:
>WHERE string BETWEEN ... AND ... | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 15:49)
| | WHERE string IN (... )
WHERE string BETWEEN ... AND ...
нет? | |
|
|
|
|
|
|
|
для: Eugene77
(05.11.2009 в 15:49)
| | А order by и limit к этому запросу нельзя приставить? | |
|
|
|
|