Javascript.RU

Результаты опроса: Какие еще технологии нужно знать
CMS 12 26.67%
Серверные (Java, PHP, C) 11 24.44%
Библиотеки (jQuery, ExtJS) 10 22.22%
Достаточен хороший JS 12 26.67%
Голосовавшие: 45. Этот опрос закрыт

Создать новую тему Ответ
 
Опции темы Искать в теме
  #51 (permalink)  
Старый 29.01.2011, 23:27
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

я тебя понял, не вопрос
Ответить с цитированием
  #52 (permalink)  
Старый 30.01.2011, 11:40
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Gozar, довольно предсказуемо рано или поздно сесть в лужу если говорить о вещах которые не понимаешь.

Программирование - это инженерная профессия к которой надо относиться с уважением, потому что если без уважения так:
Сообщение от Gozar
mysql вообще можно не учить у меня страничка пожелтевшая валяется на которой выписаны основные запросы, формат А4 на одной стороне. 99% запросов к mysql простейшие
то и программирование отнесется к тебе без уважения и
Сообщение от Gozar
Я за 10 лет
через десять лет человек не будет знать даже элементарных основ работы с базами данных ... А это говорит почти о всем.

Случай конечно зачетный, годами мне хватит его приводить в пример квалификации так называемых "специалистов". А данное простое задание запишу себе - если придется проводить собеседование с кем то - будет на почетном втором месте из заданий.

Насчет обоюдного уважения(к профессии раньше) это касается также и всего остального - отношений между людьми например:
Сам то ты форум переполнил своей критикой, начиная от содержания английских слов в чужих сообщения и выпадами типа "да неужели?!", а когда тебе задали конкретные критические вопросы, не имея ответа, ты способен только на:
Сообщение от Gozar
и прежде чем давать дурацкие поправки
сообщение данного качества, за которое я тебе в принципе и засчитываю слив.

x-yuri, ну что показываешь как сделал? Больше никто не интересуется все равно.
Ответить с цитированием
  #53 (permalink)  
Старый 30.01.2011, 11:48
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от micscr
Больше никто не интересуется все равно.
Почему? Мне интересно как сделать запрос без сабзапроса. Инетересна структура таблиц прежде всего.
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #54 (permalink)  
Старый 30.01.2011, 13:40
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

Вот еще вариант, уже без подзапроса:
Код:
SELECT u.idu, b.idu , b.idb
FROM users u
LEFT JOIN banned b
ON ((b.idu = $idu OR b.idb = $idu) AND (u.idu = b.idu OR u.idu = b.idb))
WHERE ( (b.idu IS NULL) AND (b.idb IS NULL))
ORDER BY RAND()
LIMIT 1

Последний раз редактировалось micscr, 31.01.2011 в 14:04.
Ответить с цитированием
  #55 (permalink)  
Старый 30.01.2011, 16:14
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

удалено.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.

Последний раз редактировалось Gozar, 02.02.2011 в 15:44.
Ответить с цитированием
  #56 (permalink)  
Старый 30.01.2011, 18:41
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

[offtop]
Опа опа. попкорн всегда при мне.
[/offtop]
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
  #57 (permalink)  
Старый 31.01.2011, 08:45
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

мой вариант:
в двух словах: идея заключается в том, чтобы помещать в таблицу банов 2 строки на каждую связь (два направления), тогда
drop table if exists users_2;
create table users_2 ( id int primary key );
insert into users_2 values (1), (2), (3), (4), (5), (6);
drop table if exists banned_3;
create table banned_3 (
    user_1_id int,
    user_2_id int,
    origin enum('1', '2'),
    primary key(user_1_id, user_2_id)
);
insert into banned_3 values
(2, 3, '1'), (3, 2, '2'),
(1, 3, '1'), (3, 1, '2'),
(3, 4, '1'), (4, 3, '2'),
(3, 5, '1'), (5, 3, '2');

SELECT u.*
FROM users_2 u
    LEFT JOIN banned_3 f ON u.id = f.user_1_id && f.user_2_id = 3
WHERE f.user_1_id IS NULL && u.id != 3
ORDER BY RAND()
LIMIT 1;
Ответить с цитированием
  #58 (permalink)  
Старый 31.01.2011, 09:15
Аватар для micscr
Профессор
Отправить личное сообщение для micscr Посмотреть профиль Найти все сообщения от micscr
 
Регистрация: 10.09.2009
Сообщений: 1,566

x-yuri, ну ты немного подогнал структуру базы, чтобы выполнить легко этот запрос(соединиться с одним полем второй таблицы). Дублирование информации все таки есть. Тут может оно и не критично, но например программировать операцию "Пользователь разбанивает всех своих забаненных" одним запросом не пройдет.

Сообщение от Gozar
это не слив, а реакция на твои слова:
то твое сообщение(слив) появилось раньше чем "те мои слова" ....

Почитай подпись у B~Vladi
Цитата:
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
Человек не знает теорему Пифагора не потому что у него нет времени, а потому что он ее не знает

Еще и минусанул смельчак. Правда глаза режет? Ребенок отомстил . . А на мои вопросы ответов так и нет у тебя. Это просто пипец. Мне тебя жаль. Идешь в игнор.
Ответить с цитированием
  #59 (permalink)  
Старый 31.01.2011, 09:21
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а теперь давайте сравним
создание таблиц:
-- users_2
drop table if exists users_2;
create table users_2 ( id int primary key );
insert into users_2 values (1), (2), (3), (4), (5), (6);

-- banned_2
drop table if exists banned_2;
create table banned_2 (
    idu int,
    idb int,
    primary key(idu, idb)
);
insert into banned_2 values
(2, 3),
(1, 3),
(3, 4),
(3, 5);

-- banned_3
drop table if exists banned_3;
create table banned_3 (
    user_1_id int,
    user_2_id int,
    origin enum('1', '2'),
    primary key(user_1_id, user_2_id)
);
insert into banned_3 values
(2, 3, '1'), (3, 2, '2'),
(1, 3, '1'), (3, 1, '2'),
(3, 4, '1'), (4, 3, '2'),
(3, 5, '1'), (5, 3, '2');

explain:
EXPLAIN
SELECT u.*
FROM users_2 u
    LEFT JOIN banned_3 f ON u.id = f.user_1_id && f.user_2_id = 3
WHERE f.user_1_id IS NULL && u.id != 3
ORDER BY RAND()
LIMIT 1;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: u
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 6
        Extra: Using index; Using temporary; Using filesort
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: f
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: u.id,const
         rows: 1
        Extra: Using where; Using index; Not exists


EXPLAIN
SELECT u.id
FROM users_2 u
WHERE u.id != 3
AND u.id NOT IN
  (
    SELECT IF(b.idu = 3, b.idb, b.idu)
    FROM banned_2 b
    WHERE b.idu = 3 OR b.idb = 3
  )
ORDER BY RAND()
LIMIT 1;
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: u
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 6
        Extra: Using where; Using index; Using temporary; Using filesort
*************************** 2. row ***************************
           id: 2
  select_type: DEPENDENT SUBQUERY
        table: b
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 3
        Extra: Using where; Using index


EXPLAIN
SELECT id 
FROM users_2 U 
WHERE 
  ISNULL((SELECT id 
    FROM banned_2 
    WHERE idu=3 && idb=U.id || idb=3 && idu=U.id
    ))
ORDER BY RAND()
LIMIT 1;
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: U
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 6
        Extra: Using where; Using index; Using temporary; Using filesort
*************************** 2. row ***************************
           id: 2
  select_type: DEPENDENT SUBQUERY
        table: banned_2
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 3
        Extra: Using where; Using index


EXPLAIN
SELECT u.id, b.idu , b.idb
FROM users_2 u
LEFT JOIN banned_2 b
ON ((b.idu = 3 OR b.idb = 3) AND (u.id = b.idu OR u.id = b.idb))
WHERE ( (b.idu IS NULL) AND (b.idb IS NULL))
ORDER BY RAND()
LIMIT 1;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: u
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 6
        Extra: Using index; Using temporary; Using filesort
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: b
         type: index
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 8
          ref: NULL
         rows: 3
        Extra: Using where; Using index; Not exists

запуск на более-менее реальных данных:
mysql> SELECT u.*
    -> FROM users_2 u
    ->     LEFT JOIN filters_2 f ON u.id = f.user_1_id && f.user_2_id = 5
    -> WHERE f.user_1_id IS NULL && u.id != 5
    -> ORDER BY RAND()
    -> LIMIT 1;
+------+
| id   |
+------+
| 6569 |
+------+
1 row in set (0.28 sec)


mysql> SELECT u.id
    -> FROM users u
    -> WHERE u.id != 5
    -> AND u.id NOT IN
    ->   (
    ->     SELECT IF(b.idu = 5, b.idb, b.idu)
    ->     FROM banned b
    ->     WHERE b.idu = 5 OR b.idb = 5
    ->   )
    -> ORDER BY RAND()
    -> LIMIT 1;
+-------+
| id    |
+-------+
| 25324 |
+-------+
1 row in set (1 min 56.50 sec)


mysql> SELECT id
    -> FROM users_2 U
    -> WHERE
    ->   ISNULL((SELECT id
    ->     FROM banned_2
    ->     WHERE idu=5 && idb=U.id || idb=5 && idu=U.id
    ->     ))
    -> ORDER BY RAND()
    -> LIMIT 1;
+------+
| id   |
+------+
| 5419 |
+------+
1 row in set (1 min 56.53 sec)


mysql> SELECT u.id, b.idu , b.idb
    -> FROM users_2 u
    -> LEFT JOIN banned b
    -> ON ((b.idu = 5 OR b.idb = 5) AND (u.id = b.idu OR u.id = b.idb))
    -> WHERE ( (b.idu IS NULL) AND (b.idb IS NULL))
    -> ORDER BY RAND()
    -> LIMIT 1;
+------+------+------+
| id   | idu  | idb  |
+------+------+------+
| 9609 | NULL | NULL |
+------+------+------+
1 row in set (2 min 1.47 sec)

Последний раз редактировалось x-yuri, 31.01.2011 в 10:26.
Ответить с цитированием
  #60 (permalink)  
Старый 31.01.2011, 09:36
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

интересно, кстати, micscr, что хоть твой подзапрос вроде никак не связан с внешним, но mysql его пометил как DEPENDENT SUBQUERY

Сообщение от micscr
x-yuri, ну ты немного подогнал структуру базы, чтобы выполнить легко этот запрос(соединиться с одним полем второй таблицы). Дублирование информации все таки есть. Тут может оно и не критично, но например программировать операцию "Пользователь разбанивает всех своих забаненных" одним запросом не пройдет.
Сообщение от x-yuri
структуру таблиц выбираешь сам
Чем занимаются JS-программеры.
и я не говорил, что нужно недопустить дублирования. Дублирование оно тоже разное бывает

по поводу разбанивания:
Код:
DELETE FROM banned_3
WHERE origin = '1' && user_1_id = %s ||
    origin = '2' && user_2_id = %s

кстати, негативные последствия моего решения меня интересуют, ага
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается передать переменную из JS в PHP Lion_astana AJAX и COMET 2 23.11.2010 17:23
помогите со js скриптом поиска по текстовой базе MorganStels Ваши сайты и скрипты 4 15.06.2010 10:03
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
помогите задать переменную в js bsgroupua Общие вопросы Javascript 3 01.02.2010 18:28
Самая лучшая книга по JS? ulandj Оффтопик 2 06.04.2009 11:35