|
|
|
|
|
для: cheops
(09.10.2007 в 10:22)
| | >Обязательно напротив каждого из слов хранить количество его вхождений? Может выделить для этого отдельную таблицу?
Я в этом направлении не думал...
Вообще-то не хотелось таблицы плодить... ну в крайнем случае можно.
Я читал, что в mysql можно элиасы и для полей таблиц применить, не только для имён.
Только у меня ещё это никак в голове не уложится. Опыта не хватает. Чтобы сочинить
толковый запрос. | |
|
|
|
|
|
|
|
для: Eugene77
(08.10.2007 в 18:34)
| | Обязательно напротив каждого из слов хранить количество его вхождений? Может выделить для этого отдельную таблицу? | |
|
|
|
|
|
|
|
для: cheops
(08.10.2007 в 12:08)
| | Я думал из моего скрипта это ясне, чем из слов.
Ну, как вам удобнее. ..
В нескольких случаях в одном и том же проекте у меня ситуация, когда я получаю от
клиентов или иным путём строки. Я не знаю наперёд какие они, но мне необходимо их запомнить и получить точное число повторов, если таковые случатся.
Несколько запросов могут поступать к таблице одновременно.
Ну, теперь, я уже начинаю думать, что хочу невозможного
UPDATE INSERT ом не сделаешь...
Как-то это грустно.
Неужели одним запросом задачу нельзя решить?! | |
|
|
|
|
|
|
|
для: Eugene77
(08.10.2007 в 08:29)
| | Тогда объясните подробнее, чего вы хотите добиться? Т.е. что у нас на входе, а что должно получаться на выходе? Какую задачу решает скрипт? | |
|
|
|
|
|
|
|
для: Eugene77
(07.10.2007 в 22:08)
| | Ну вообще говоря, при запросе COUNT(*) отсылается одно число, а при выборке столбцов MySQL честно отправляет все данные, забивая канал, расходуя память и процессор. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2007 в 10:09)
| | Мне кажется, что вместо того, чтобы писать весь этот мутный код, до которого я пока только дозрел,
можно сформулировать всего один запрос на основе IGNORE. Тем более, что мой код ещё и не вполне корректен в условиях когда к одной таблице обращается множество параллельных процессов (навствляют лишнего).
Помогите составить грамотный запрос! | |
|
|
|
|
|
|
|
для: cheops
(07.10.2007 в 10:09)
| | >Хм... а почему в первом запросе функция COUNT(*) не используется? Она выполняется быстрее, чем выборка результирующей таблицы.
Намного ли? :}
Всё-равно ту же длину дорожки с диска читать...
Или нет?
Ну а мне так было удобней для отладки выводить всё на экран.
Что, стоит исправить? Или пустая возня? | |
|
|
|
|
|
|
|
для: Eugene77
(06.10.2007 в 18:31)
| | Хм... а почему в первом запросе функция COUNT(*) не используется? Она выполняется быстрее, чем выборка результирующей таблицы. | |
|
|
|
|
|
|
| Ситуация, кажется, очень распространенная.
Надо подсчитать сколько раз входит каждая из строк. $s.
Я делаю это такими запросоми в цикле:
<?
$q="SELECT * FROM vars WHERE var = '$s'";
$exist = mysql_query($q) or exit("Ошибка при проверке наличия строки $s в таблице vars ".mysql_error().'<br>');
switch (mysql_num_rows($exist)){
case 0 :
$n = mysql_query('SELECT count(*) FROM vars') or exit("Ошибка при подсчёте строк в таблице vars ".mysql_error().'<br>');
$q="INSERT INTO vars VALUES(NULL,'$s',1)";
mysql_query($q) or exit("Ошибка при добавлении сроки $s в таблицу vars ".mysql_error().'<br>');
break;
case 1 :
$q="UPDATE vars SET quantity=quantity+1 WHERE var='$s'";
mysql_query($q) or exit("Ошибка при увеличении значения числа строк $s в таблице vars ".mysql_error().'<br>');
break;
default: exit("Переменная $s почему-то найдена в таблице ".mysql_result($exist,0).' раз');
}
?>
|
Получается долго.
Можно ли это оптимизировать. Одним запросом сделать? | |
|
|
|
|