0
Другие записи за это число:
2011/03/11 - Редактор файлов
<< предыдущая заметкаследующая заметка >>
11 марта 2011
Вопрос по MySQL

ВНИМАНИЕ!
НЕ ОБНОВЛЯЙТЕ ПОКА ДВИЖОК!

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

Вообще с моей стороны это вообще когда-то было очень непродуманным шагом, совмещать в одном лице экспериментальную бету и сервер-матку. Когда я закончу новую версию админки (уже скоро), там по умолчанию сервер обновления будет Stable — lleo.aha.ru/dnevnik/ или даже SuperStable lleo.aha.ru/, но никак не бета lleo.aha.ru/blog/

Тем, кто успел обновиться, советую зайти в /install.php и нажать кнопку «back»


UPD: Всем спасибо за советы! Правильный ответ (от illand с небольшими уточнениями по справочнику) такой:

SELECT t.*,GROUP_CONCAT(CONCAT_WS('=',o.name,o.value) SEPARATOR ';') as opt
FROM `ZAPISI` as z LEFT JOIN `OPT` as o USING (`num`)
WHERE `num`='123'

в выдаче добавляется:

opt: comments=on;comments_mode=tree;comments_screen=off;preformat=0

Однако больше всего мне пришелся по душе совет хранить опции в поле text как serialize(). Пожалуй, это самое умное, что можно придумать для такой задачи, когда опции хрен знает какие, но никогда никакого поиска по ним не потребуется — это опции отображения заметки и ее комментариев.

Было:

Сейчас существует таблица заметок, пример записи в таблице ZAPISI:

numtextcommentscomments_modecomments_screenpreformat...
123Сегодня ночью мне снился сон, будто бы я...ontreeoff0...
124...

Поле 'text' может и занимать мегабайт (текст романа), а вот опции — мелкие, чаще всего enum. Проблемы две: обычно пользователь не меняет их, в большинстве заметок они одинаковы. Проблема вторая серьезнее: я не знаю, какие опции понадобятся в будущем. Запрет на комментарии со ссылками? Текст для подписывания тех фотографий, которые посетители загрузят в комментарий именно к этой заметке («конкурс Сиськи Года в блоге Васи»)? Количество допустимых комментариев от каждого пользователя в этой заметки? Неизвестно.

Поэтому здравой мыслью было бы завести таблицу OPT, и там хранить опции:

таблица ZAPISI:

numtext
123Сегодня ночью мне снился сон, будто бы я...

таблица OPT:

idnumnamevalue
1123commentson
2123comments_modetree
3123comments_screenoff
4123preformat0

Вроде бы все хорошо, но проблема оказалась в том, что MySQL не умеет делать на этот счет один корректный запрос вида:

SELECT * FROM `ZAPISI` as z LEFT JOIN `OPT` as o ON z.num=o.num WHERE z.num='123'

То есть, MySQL конечно запрос выполняет, но выдает не запись 123, а 4 записи по числу найденных в OPT, в каждой пристыковывая text из ZAPISI (а это, напоминаю, роман на 1мб).

Нужен совет. Вариант, что все-таки существует в MySQL пример записи для подобного случая, просто я не знаю, пока отметается — вроде я поизучал вопрос. Поэтому вариантов вижу два:

1. Надо делать два запроса к MySQL:
SELECT * FROM `ZAPISI` WHERE num='123'
SELECT name,value FROM `OPT` WHERE num='123'

2. Не надо разбивать таблицу на две. Поскольку обычно опции короткие типа enum(0,1,'yes','off'), надо просто дописывать в таблицу `ZAPISI` новые имена переменных по мере необходимости.

Вопрос в том, что окажется ДЕШЕВЛЕ в плане ресурсов. Потому что хрен его знает, насколько крупным окажется в итоге движок и его пользователи, и лучше такие вещи продумать заранее. То есть, вариант 1 или 2 — не похуй, нужно выбрать тот, который экономнее в плане ресурсов.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`