|
|
|
|
|
для: Sturmvogel
(06.09.2011 в 16:57)
| | Для начала можно попытаться переписать запрос с использованием объединений таблиц, посмотреть при помощи оператора EXPLAIN схему выполнения и проиндексировать соответствующие ключи. Если скорость по прежнему будет не удовлетворительной следует думать в сторону нормализации таблиц или создания кэширующей таблицы, которая бы дублировала данные из нескольких таблиц (т.е. фактически хранить копию объединенных данных). | |
|
|
|
|
|
|
|
для: cheops
(06.09.2011 в 16:21)
| | ну а если нет, что и как соптимизировать можно? | |
|
|
|
|
|
|
|
для: Sturmvogel
(06.09.2011 в 16:13)
| | Если работает и скорость работы устраивает - адекватен. | |
|
|
|
|
|
|
|
для: Sturmvogel
(04.09.2011 в 22:23)
| | Такой запрос будет адекватен?
SELECT id FROM records WHERE author=$author AND
can_see='all' OR
(can_see='friends' AND EXISTS (SELECT * FROM friends WHERE user_from=$author AND user_to=$viewer AND status='approved')) OR
(can_see='list' AND EXISTS (SELECT * FROM can_see_list WHERE user=$viewer AND record=id)) OR
(can_see='me' AND author=$viewer)
AND NOT EXISTS (SELECT * FROM cant_see_list WHERE user=$viewer AND record=id)
ORDER BY add_date LIMIT 10;
|
| |
|
|
|
|
|
|
|
для: Valick
(05.09.2011 в 00:14)
| | спасибо за помощь)))
просто чую, теперь будут дикие джоины идти в запросе))
-------
получается, придется писать что-то типа:
SELECT r.id FROM records WHERE can_see='all' AND NOT EXISTS (SELECT * FROM cant_see_list WHERE user=$visitor AND record=r.id);
|
??? | |
|
|
|
|
|
|
|
для: Sturmvogel
(05.09.2011 в 00:08)
| | сегодня уже тыква не варит)) завтра подумаю и напишу (точнее уже сегодня)) )
но по моему лучше 2 таблицы
хотя они взаимоисключающие))
если разрешено, значит не запрещено и наоборот)
___
спать, спать, спать))) а то мозг лопнет)) | |
|
|
|
|
|
|
|
для: Valick
(05.09.2011 в 00:03)
| | А имеет ли смысл делать таблицу с полями:
record_id, user_id, privacy ('show', 'hide') -- имеется в виду поле типа ENUM
или для show и hide лучше делать разные таблицы? | |
|
|
|
|
|
|
|
для: Sturmvogel
(04.09.2011 в 23:59)
| | теперь яснее | |
|
|
|
|
|
|
|
для: Valick
(04.09.2011 в 23:08)
| | Таблица
CREATE TABLE `records` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`author` int(11) unsigned NOT NULL,
`text` varchar(500) NOT NULL,
`description` text NOT NULL,
`emotion` enum('none', 'happy', 'sad') NOT NULL DEFAULT 'none',
`location` int(11) NOT NULL,
`can_see` enum('all', 'friends', 'me', 'list') NOT NULL DEFAULT 'all',
`can_see_list` varchar(255) NOT NULL,
`cant_see` enum('none', 'all', 'list') NOT NULL DEFAULT 'none',
`cant_see_list` varchar(255) NOT NULL,
`count_comments` int(11) unsigned NOT NULL DEFAULT 0,
`add_date` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
$viewer -- это переменная, которая передается в функцию, которая формирует список записей. Переменная -- это пользователь, который просматривает страницу. | |
|
|
|
|
|
|
|
для: Sturmvogel
(04.09.2011 в 23:52)
| | у вас Петя должен видеть все сообщения Васи или выборочно?
если все то ответил в предыдущем посте, если каждое сообщение имеет разрешение на просмотр то
record_id, user_id (id - тут не нужен, функцию первичного ключа будут выполнять оба поля - такой ключь называется составным, главное не забыть об этом сообщить базе данных) | |
|
|
|
|