|
Результаты опроса: Какие еще технологии нужно знать
|
|
CMS
|
|
12 |
26.67% |
Серверные (Java, PHP, C)
|
|
11 |
24.44% |
Библиотеки (jQuery, ExtJS)
|
|
10 |
22.22% |
Достаточен хороший JS
|
|
12 |
26.67% |
|
28.01.2011, 13:47
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,578
|
|
а что - можно свои ответы? Я так понял задание - Гозару, который обходится листиком sql запросов?
|
|
28.01.2011, 14:15
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
нет, задание в первую очередь тем, кто не знает, как такие вещи делаются. Хотя именно такой вариант, думаю, достаточно редкий
|
|
28.01.2011, 19:54
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
удалено.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 02.02.2011 в 15:43.
|
|
28.01.2011, 20:50
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
для ясности, скажу что хоть твое заявление (mysql вообще можно не учить у меня страничка пожелтевшая валяется на которой выписаны основные запросы) было слишком категоричным, задание - для всех, кто не знает ответа заранее (ну сложно сказать для кого, учитывая, что это не одна из классических задач). Ну и... я подожду
|
|
28.01.2011, 21:08
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
удалено.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 02.02.2011 в 15:44.
|
|
28.01.2011, 21:15
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
удалено.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Последний раз редактировалось Gozar, 02.02.2011 в 15:44.
Причина: ps: а чего комментариев не будет, типа - реализация говно, жизнь фуфло или ещё каких-нибудь?
|
|
29.01.2011, 03:26
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
будут, просто во-первых я тоже бываю занят, а во-вторых я не вкурил твою идею с первого раза, поэтому решил отложить ее на попозже
т.е. в таблицу banlist пишется кто забанил (user_id) и кого забанили (ban_id), причем при добавлении пользователя в banlist сразу же вставляется запись с ban_id = 0. А при бане мы должны сначала узнать из таблицы users банил ли этот пользователь раньше (flag_banned = 1). Если банил вставляем в banlist новую запись, иначе обновляем существующую. Но если пользователь A забанил пользователя B, то он не должен видеть пользователя B, а у тебя видит:
Код:
|
drop table if exists banlist;
create table banlist (user_id int, ban_id int);
insert into banlist values (1, 2), (2, 0);
select user_id from banlist where ban_id != 1 and user_id != 1;
+---------+
| user_id |
+---------+
| 2 |
+---------+ |
и наоборот, но это у тебя работает. Кроме того, на каждый бан нужно выполнить три запроса select users + insert/update banlist + update users. Не хорошо, теоретически можем потерять данные. Если пользователь отправит 2 запроса бана разных пользователей, тогда один из банов может потеряется. Не уверен, что такая ситуация может возникнуть в real life, но по-крайней мере этого лучше избежать, если есть такая возможность
|
|
29.01.2011, 06:20
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
точнее наоборот тоже не работает
Код:
|
drop table if exists banlist;
create table banlist (user_id int, ban_id int);
insert into banlist values (1, 2), (1, 3), (2, 0), (3, 0);
select user_id from banlist where ban_id != 2 and user_id != 2;
+---------+
| user_id |
+---------+
| 1 |
| 3 |
+---------+ |
|
|
29.01.2011, 09:15
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,578
|
|
Код:
|
CREATE TABLE IF NOT EXISTS `users` (
`idu` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`idu`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` (`idu`, `name`) VALUES (1, 'a'),(2, 'b'),(3, 'c'),(4, 'd'),(5, 'f'),(6, 'g'),(7, 'k');
CREATE TABLE IF NOT EXISTS `banned` (
`idu` int(11) NOT NULL,
`idb` int(11) NOT NULL,
PRIMARY KEY (`idu`,`idb`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Дамп данных таблицы `banned`
--
INSERT INTO `banned` (`idu`, `idb`) VALUES (2, 3),(3, 4),(3, 5),(4, 2);
-- Запрос
SELECT u.idu
FROM users u
WHERE u.idu != $idu
AND u.idu NOT IN
(
SELECT IF(b.idu = $idu, b.idb, b.idu)
FROM banned b
WHERE b.idu = $idu OR b.idb = $idu
)
ORDER BY RAND()
LIMIT 1 |
Последний раз редактировалось micscr, 31.01.2011 в 14:04.
|
|
29.01.2011, 09:21
|
|
Профессор
|
|
Регистрация: 10.09.2009
Сообщений: 1,578
|
|
Сообщение от Gozar
|
ps: а чего комментариев не будет, типа - реализация говно, жизнь фуфло или ещё каких-нибудь?
|
Ты делаешь запрос к одной таблице(banlist), т.е. предполагаешь, что в этой таблице обязательно встречаются id-шники всех юзверей?
|
|
|
|