edogs software

edogs software
Рейтинг
775
Регистрация
15.12.2005
Должность
Программирование
FL|\/|@ster:
Здравствуйте!
Имеется таблица с текстом, датой, группой.
Мне нужно упорядочить по дате (в порядке убывания), при этом должно браться по 3 материала с каждой группы. Как это сделать в виде запроса?

Нормальных решений чисто мускульных как минимум 2 (пхп-шные очевидны).

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

1) Нечто вроде следующего (для 2 материалов, для 3 просто продолжаем)


select * from _tmp as a
left join _tmp as b on a.id<b.id and a.grp=b.grp
left join _tmp as с on b.id<c.id and b.grp=c.grp
where c.id is null group by a.grp order by a.dta

смысл запроса в вытягивании 3 строк в одну строку, при кол-ве нужных записей до 16 штук обычно летает:)

2) Нечто вроде следующего


SELECT *,
group_concat( concat_ws('~',txt,dta) order by dta asc separator '=' )
FROM `_tmp` WHERE 1
group by grp
order by dta

здесь мы в одном из полей получаем всю выборку нужных данных для группы (к сожалению без лимитов, но если нам известна длина выборки максимальная, то можем ограничить с помощью

set session group_concat_max_len=1024; #1024- кол-во символов в выборке

Конечно должны быть индексы на id и grp.

Первый вариант в случае отсутствия id тоже решаем, нужно просто использовать вместо id дату, а случаи совпадения дат отсеивать с помощью проверки на разность в других полях (но умнее конечно id ввести).

P.S.: А вообще в таких случаях проще всего слегка "кэшировать" это дело. То есть при добавлении записи, смотреть ее группу, и 3 последние записи этой же группы апдейтить флагом "last3" (в отдельном поле). Тогда Вы в разы облегчите себе дальнейшие выборки, потому что оба вышеозначенных варианта, несмотря на индексы - все-таки сложнее чем прямая выборка. А вариант на php вообще ужасен с точки зрения скорости.

4996699:
"сами знаете кто" открыл весьма интересный сервис LendLand. ру
правда пока бета версию, сюдя по отзывам на форуме народ уже активно использует сервис

Если мы правильно поняли суть этого сервиса (доверяешь списывать деньги со своего кошелька сервису lendland , но при этом сам сервис не несет никакой ответственности за возврат кредитов и оформление претензий юридически мягко говоря под вопросом в случае чего - без договора займа-то), то это прямо говоря немерянно стремный вариант с нулевым кол-вом преимуществ перед кредитной биржей (особенно учитывая что на lendland пойдут в основном те, кто на кредитную биржу проникнуть не сможет... или те кто о ее существовании просто не знает), но определённо с недостатками (кроме всего прочего еще и % сниматься будут).

Объективного смысла в нем никакого не видим. Использоваться он понятное дело будет, но мы не видим варианта зачем он нужен адекватному и грамотному заемщику и адекватному и грамотному кредитору. Ну разве что 7-дневная задержка с авторизацией по енуму для кого-то является проблемой и он ее решит через lendland.

preg_match ("~(.*)\?~si", $URL, $match);

или если основываться на Вашей регулярке, Вам ограничители жадности там мешают

preg_match ("|(.*)\?(.*)|si", $URL, $match);

Проверьте таблицы на предмет одинаковых "кодировок" хранения данных. Сначала таблицы. Потом поля. Смените их так, что бы везде были одинаковыми (в идеале cp1251 конечно же).

Скорее всего часть таблиц (старые или новые) созданы с latin1 collation, а часть с cp1251. А джоинить на выборке разные кодировки нельзя.

Идеальный вариант воспользоваться какой-нибудь службой почтовых рассылок - smartrespnder, subscribe, mail ... другие. Пути антиспам-программ неисповедимы, а когда отправляется куча писем с одного места, достаточно шустно и практически одинаковых, да еще с не особо понятного IP у них может проснуться паранойя. На крайний случай можно отправить с gmail из своего аккаунта.

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

Unlock:
Собственно сабж. Есть ли принципиальная разница и на каком варианте остановится. С воблой совсем не знаком, поэтому хочу посоветоваться.

Если не стоит критично проблема производительности и/или база еще небольшая, то лучше в utf8 работать. Часть неофициальных плагинов и модов слегка под утф8 заточены и с цп1251 могут не вполне корректно работать (речь конечно про свежие версии воблы). Переводы тоже почаще в утф8 встречаются (конвертнуть конечно не проблема, но зачем?). Но именно принципиальной разницы нет.

Agressive_Pig:
Всем привет!
Я получаю дату: $data = date("H:i:s");
Но на сервере время отличается от московского.
Подскажите плз, как подвинуть время на +8часов?

Именно подвинуть на 8 часов, $data=date("H:i:s",time()+3600*8);

Но если задача спокойно использовать московское время в функциях php, то проще в начале скрипта задать временную зону

date_default_timezone_set("Europe/Moscow");

http://ru2.php.net/manual/ru/function.date-default-timezone-set.php

Если начнете работать с БД, то там тот же принцип приемлим - первый запрос - выставление нужной таймзоны.

Универсально, удобно, быстро и главное понятно.

asamakin:
Друзья, приветствую! Нужна помощь. Дело в следующем:
В моей таблице (Mysql) более 600 тысяч записей. Как мне не уронив сервак, почистить дубликаты? Может как-то с задержками через php? Есть мысли? Очень надо.. С наступающим праздником!

Честно говоря не очень ясно описана задача, но тем не менее, мы обычно используем следующий запрос

ALTER ignore TABLE `tablename` ADD UNIQUE ( `field1` ,`field2`  ) 

для удаления дубликатов из базы. В данном примере оставляются только те записи, в которых field1, field2 уникальные. То же можно сделать по 1 полю или по нескольким.

Лучше делать это на отдельной таблице, что бы во время альтерения не было других запросов. Способ самый шустрый из возможных.

Вариант через php конечно возможен. Но он медленен, печален и достаточно очевиден. Выбираете последовательно по 1000 записей из старой БД и вставляете в новую. Для простоты в новой можно создать unique индекс по нужным полям, что бы не париться лишний раз с проверками на возможность вставки.

P.S.: Варианты вида select join - просто ужасны и скорее всего однозначно положат базу на больших таблицах. Такие варианты годятся неплохо для нескольких таблиц, но для одной это просто страшный overkill

Andreyka:
Сгореть может любой сервер, почитайте статистику от Google.

Все продолжаете игры в "капитана очевидность"? Извините, скучно, поэтому не поддержим.

Andreyka:
А ваш хостинг - некачественный и допотопный:

Так и запишем, esupport.org.ua не чурается поливать грязью конкурентов, при том совершенно необоснованно и передергивая системы оценки. Отличное начало для нового хостера, поздравляем.

Andreyka:

Complete requests: 1000
Failed requests: 118

Так и запишем, Ваш тестирования "качества" хостинга это ab и количество проваленных запросов.

А заодно мы убедились, что Ваш сайт, по Вашей же системе оценки, хостится на еще менее качественном и более допотопном хостинге. У нас 118 фаилов, у Вас 479.


Server Software: Apache/2.2.3
Server Hostname: dedic.ru
Server Port: 80

Document Path: /
Document Length: 1686 bytes

Concurrency Level: 100
Time taken for tests: 23.155 seconds
Complete requests: 1000
Failed requests: 479
(Connect: 0, Length: 479, Exceptions: 0)

И да, любые Ваши объяснения почему у Вас в 4 раза больше фаилов - не принимаются. Потому что Вы их сами же приводили как аргумент абсолютно безаппеляционно. Пожинайте то, что посеяли. А следующий раз думайте прежде чем говорить.

P.S.: Тем кто не очень разбирается в вопросе. За 20 секунд у нас на хостинге, вирт.хостинге, прошло 800 запросов (из 1000, 200 отвалилось). Это 40 запросов в секунду, т.е. 3,456,000 хитов в сутки в эквиваленте. Вот и делайте выводы.

Andreyka:
А что вы будете делать, когда на вашем сервере сгорит жесткий диск или материнская плата?

Попросим заменить. Давайте все-таки в "капитана очевидность" не будем играть тут? Если так хочется не иметь и этих проблем, то надо брать сервер в более приличном ДЦ вот и всё. А если Вы хотите поговорить о таких примерах, то давайте назовите цену вирт.хостинга с теми ресурсами о которых мы говорили говоря о сервере, а потом давайте посчитаем что можем получить в случае аренды сервера за эти же деньги. Не забывайте, что железо - оно относительно дешево. А людские ресурсы - относительно дороги. И людских ресурсов на обслуживание сервера забитого клиентами как бочка сельдю нужно соразмерное кол-во. Поэтому устраняя "дорогие" людские ресурсы выделяемые на причины вызываемые кучей клиентов, освобождаются деньги для покупки "дешевого" железа.

Andreyka:
Мы тут говорим о качественном хостинге

Прочитайте первый абзац нашего предыдущего сообщения, Вы его видимо пропустили. Там как раз пример качественного хостинга.

Andreyka, непонятно что Вы подразумеваете под качественным хостингом. Давайте на конкретном примере. edogs.ru сайт, с 2007-02-05 подписан на хост-тракер, по нему 100% аптайма. Цена хостинга 8 баксов, у заслуженного хостера (имя специально не назовем). При том на этом же тарифе хостится еще сайт, которому на Вашем 10-40 баксовом хостинге просто не хватило бы ресурсов для работы, там 2-5 кратное превышение было бы, т.е. Вы нас просто выключили бы и мы бы сидели без сайта. А теперь скажите - чем предложение в начале топика качественнее чем то, что мы имеем сейчас? Только тем что дороже?

Вы поймите правильно. Слово "качество" денег платить за хостинг никого не заставит. Назовите конкретно что такого нового и качественного и отсутствующего у конкурентов будет на этом хостинге, будет о чем говорить, только ресурсов для начала выставьте столько, что бы нормальный сайт там работать мог.

Всего: 12159