edogs: Во первых, не добавит, потому что апдейт таблицы на которую в этом же запросе делаешь селект - недопустим. Во вторых, операцией сложения Вы прибили вообще информацию в хэшах.
1) это где нельзя, в MySQL?
2) операцией сложения добавил к каждой неуникальной строке 2 случайных цифры. или что вы имеете ввиду под "прибил" ?
---------- Добавлено в 18:31 ---------- Предыдущее сообщение было в 18:23 ----------
но вообще-то да, неправильно написал, он прибавит к каждой неуникальной :-(, а надо только к одной
ваш update, кстати, тем же болеет ;-)
вот так будет правильнее
insert into tm select max(id) from tabl group by hash having count(*)>1;
с позиции человека, который не шарит в jquery, а скачал скрипт часов и хочет его чуть поправить.
Мне кажется, тут не сложно поправить, если знать что :) В переменную old_hours подставлять текущие часы не с компьютера посетителя, а например Вашингтонского времени.
1. Получить временнУю зону getTimezoneOffset()
2. Прибавить ее к текущему времени - получим UTC
3. Вашингтон, если мне не изменяет память, живет позади Лондона на 5 часов, значит добавляем -5 (ну или отнимаем 5), получаем время в Вашингтоне.
Не забываем только переводить все в миллисекунды - getTimezoneOffset возвращает в минутах (т.е. умножить на 60000 надо), 5 часов тоже перевести в миллисекунды нужно (умножить на 3600000).
Дикий пионер: Просто это условие - с массивом - всегда будет true. В доке на php.net написано что массив всегда больше любого аргумента, кроме массива. Если сравниваются с массивом - то может оказаться меньше.
Он еще null может быть, если мне память не изменяет
Yeisk-Online: Нет, я лично не пользуюсь услугами этого провайдера. Меня интересует, как заставить провайдера отказаться от этой дурацкой затеи - блокировать сайт? Ведь это, я так понимаю, не законно?
Вы правильно понимаете что это незаконно.
Есть два пути - задействовать закон или использовать прокси. Понятно, что второй путь существенно проще.
Если идти по первому пути, то совершенно неважно что прописано в договоре - если договор нарушает закон, то договор признается ничтожным. Понятно что провайдер может прописывать пункты о "технической невозможности" или другой подобный бред - а значит привлечение экспертов и прочий геморой. В идеальном мире дело конечно выигрывается, на практике... На практике зачастую достаточно грамотно составленное ( обязательно с помощью юриста) письмо к провайдеру - там тоже не дураки сидят.
С точки зрения провайдерского бизнеса - дешевле отказаться от проблемного клиента и пусть он мозги трахает конкурентам - тут pupseg прав.
---------- Добавлено в 10:39 ---------- Предыдущее сообщение было в 10:32 ----------
pupseg:
одно время, я - пользуясь своим служебным положением в те времена хотел сделать мир лучше и залочил торрентс.ру, порнолаб.нет, кучу других популярных порнушников, через заворот на captive portal сделал страничку - что мол - этот ресурс запрещен.. и т д... стоооооолько дрочеров среди наших клиентов обнаружилось :))))
это вы напрасно, раньше эти пользователи удовлетворяли свои, гм, потребности перед монитором, а теперь на улицу вышли.
EXPLAIN SELECT * FROM `cms_brand` FORCE INDEX (trans) WHERE name!='abb' AND (trans!='abb' OR trans!='gewi')
То EXPLAIN нам выдаст, что используется наш ключик trans.
А если мы добавим ещё LIMIT 1, то вообще прелесть будет :)
конечно мы можем заставить использовать индекс. в этом случае мы сначала будем ходить по индексу, а потом пойдем за данными в таблицу, т.е. получим 2 IO операции вместо одной, но нам же не это нужно, правда?
суть в том, что в данном случае нет никаких преимуществ в использовании индекса по сравнению с table scan, а недостатки известны - дополнительное место под индекс, перестройка (а значит локи) индекса при вставке-удалении-апдейте.
оптимизатор может выбрать использовать индекс в трех случаях
а) индекс кластерный - т.е. данные хранятся физически вместе с индексом
б) таблица достаточно широкая - может получиться что шагать по индексу дешевле (в терминах IO) чем шагать по таблице
в) в селекте выбирается только те колонки, из которых состоит индекс
Lemurian: Почему когда удаленный компьютер изменяет текст на кнопке, в это время локальный пользователь не может по ней кликнуть? Форма просто висит, а когда жмешь на кнопку, ничего не происходит.
Как я понял, поток формы просто занят одной задачей и вторую он выполнить не в состоянии. Может подскажите, как сделать очередь заданий (для формы)?
поток висит и ждет пока удаленный компьютер что-то ему скажет.
два варианта
а) использовать неблокирующие сокеты
б) создать отдельный поток для слушания удаленного компьютера
Почитайте, что такое индексы. От запроса это не зависит.
действительно, иногда лучше жувать.
я вот проверил, при "!=" составной индекс не используется. такой же запрос, но с "=" - используется.
если немножко подумать о том, как устроены индексы и как по ним поиск идет, то можно догадаться почему именно так, а не иначе.
---------- Добавлено в 23:42 ---------- Предыдущее сообщение было в 23:40 ----------
Dreammaker: Если мне не изменяет память, то конструкция IN или её аналог OR ... OR
... OR .... проходит аналогично отдельным запросам, а значит и составной индекс будет задействоваться. Но я сделал оговорку, что нужно проверить EXPLAIN. Ибо "чуйка" подсказывает, что должно работать, но всё же проверка не будет лишней, ибо я уже какое-то время больше "по руководящей линии", чем собственно програмлю, мог уже что-то и забыть.
да не, тут не про IN/OR - это синтетический сахар, тут про "!=" vs "="
Во первых, не добавит, потому что апдейт таблицы на которую в этом же запросе делаешь селект - недопустим.
Во вторых, операцией сложения Вы прибили вообще информацию в хэшах.
1) это где нельзя, в MySQL?
2) операцией сложения добавил к каждой неуникальной строке 2 случайных цифры. или что вы имеете ввиду под "прибил" ?
---------- Добавлено в 18:31 ---------- Предыдущее сообщение было в 18:23 ----------
но вообще-то да, неправильно написал, он прибавит к каждой неуникальной :-(, а надо только к одной
ваш update, кстати, тем же болеет ;-)
вот так будет правильнее
WHERE id IN (
SELECT id FROM list
GROUP BY id HAVING count(id) > 1)
добавит два случайных числа к id
с позиции человека, который не шарит в jquery, а скачал скрипт часов и хочет его чуть поправить.
Мне кажется, тут не сложно поправить, если знать что :)
В переменную old_hours подставлять текущие часы не с компьютера посетителя, а например Вашингтонского времени.
1. Получить временнУю зону getTimezoneOffset()
2. Прибавить ее к текущему времени - получим UTC
3. Вашингтон, если мне не изменяет память, живет позади Лондона на 5 часов, значит добавляем -5 (ну или отнимаем 5), получаем время в Вашингтоне.
Не забываем только переводить все в миллисекунды - getTimezoneOffset возвращает в минутах (т.е. умножить на 60000 надо), 5 часов тоже перевести в миллисекунды нужно (умножить на 3600000).
Т.е. вместо строчки old.setTime(....... пишете
Просто это условие - с массивом - всегда будет true. В доке на php.net написано что массив всегда больше любого аргумента, кроме массива. Если сравниваются с массивом - то может оказаться меньше.
Он еще null может быть, если мне память не изменяет
Нет, я лично не пользуюсь услугами этого провайдера. Меня интересует, как заставить провайдера отказаться от этой дурацкой затеи - блокировать сайт? Ведь это, я так понимаю, не законно?
Вы правильно понимаете что это незаконно.
Есть два пути - задействовать закон или использовать прокси. Понятно, что второй путь существенно проще.
Если идти по первому пути, то совершенно неважно что прописано в договоре - если договор нарушает закон, то договор признается ничтожным. Понятно что провайдер может прописывать пункты о "технической невозможности" или другой подобный бред - а значит привлечение экспертов и прочий геморой. В идеальном мире дело конечно выигрывается, на практике... На практике зачастую достаточно грамотно составленное ( обязательно с помощью юриста) письмо к провайдеру - там тоже не дураки сидят.
С точки зрения провайдерского бизнеса - дешевле отказаться от проблемного клиента и пусть он мозги трахает конкурентам - тут pupseg прав.
---------- Добавлено в 10:39 ---------- Предыдущее сообщение было в 10:32 ----------
одно время, я - пользуясь своим служебным положением в те времена хотел сделать мир лучше и залочил торрентс.ру, порнолаб.нет, кучу других популярных порнушников, через заворот на captive portal сделал страничку - что мол - этот ресурс запрещен.. и т д...
стоооооолько дрочеров среди наших клиентов обнаружилось :))))
это вы напрасно, раньше эти пользователи удовлетворяли свои, гм, потребности перед монитором, а теперь на улицу вышли.
Да и вообще, не суди, да не судим будешь
А если мы сделаем так?
EXPLAIN SELECT * FROM `cms_brand` FORCE INDEX (trans) WHERE name!='abb' AND (trans!='abb' OR trans!='gewi')
То EXPLAIN нам выдаст, что используется наш ключик trans.
А если мы добавим ещё LIMIT 1, то вообще прелесть будет :)
конечно мы можем заставить использовать индекс. в этом случае мы сначала будем ходить по индексу, а потом пойдем за данными в таблицу, т.е. получим 2 IO операции вместо одной, но нам же не это нужно, правда?
суть в том, что в данном случае нет никаких преимуществ в использовании индекса по сравнению с table scan, а недостатки известны - дополнительное место под индекс, перестройка (а значит локи) индекса при вставке-удалении-апдейте.
оптимизатор может выбрать использовать индекс в трех случаях
а) индекс кластерный - т.е. данные хранятся физически вместе с индексом
б) таблица достаточно широкая - может получиться что шагать по индексу дешевле (в терминах IO) чем шагать по таблице
в) в селекте выбирается только те колонки, из которых состоит индекс
vm.zone_reclaim_mode = 0 было 1
1) стала ли использоваться вся память?
2) уменьшилась ли нагрузка на диски?
вроде бы эти проблемы озвучивались в первом посте
Почему когда удаленный компьютер изменяет текст на кнопке, в это время локальный пользователь не может по ней кликнуть? Форма просто висит, а когда жмешь на кнопку, ничего не происходит.
Как я понял, поток формы просто занят одной задачей и вторую он выполнить не в состоянии. Может подскажите, как сделать очередь заданий (для формы)?
поток висит и ждет пока удаленный компьютер что-то ему скажет.
два варианта
а) использовать неблокирующие сокеты
б) создать отдельный поток для слушания удаленного компьютера
а зачем ? денормализация она всякая бывает. и смысл в ней иногда тоже есть.
нельзя ли поподробнее отсюда?
при чем здесь денормализация?
на вопрос "зачем" уже вроде ответили - чтобы извращения не писать в виде "substring(substring("
лучше жувать иногда :)
Почитайте, что такое индексы. От запроса это не зависит.
действительно, иногда лучше жувать.
я вот проверил, при "!=" составной индекс не используется. такой же запрос, но с "=" - используется.
если немножко подумать о том, как устроены индексы и как по ним поиск идет, то можно догадаться почему именно так, а не иначе.
---------- Добавлено в 23:42 ---------- Предыдущее сообщение было в 23:40 ----------
Если мне не изменяет память, то конструкция IN или её аналог OR ... OR
... OR .... проходит аналогично отдельным запросам, а значит и составной индекс будет задействоваться. Но я сделал оговорку, что нужно проверить EXPLAIN. Ибо "чуйка" подсказывает, что должно работать, но всё же проверка не будет лишней, ибо я уже какое-то время больше "по руководящей линии", чем собственно програмлю, мог уже что-то и забыть.
да не, тут не про IN/OR - это синтетический сахар, тут про "!=" vs "="