Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> php+mysql исключающая выборка 
V
    Опции темы
realPROme
Дата 23.6.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



есть таблицы t1 и t2
в первой есть некий столбик id1 + прочие данные, во второй есть некий стобик id2, оба этих столбика в целочисленном формате

как лучше всего организовать выборку одной стручайной строчки из t1, чтоб при этом значения id1 не было ни в одном рядке id2 таблицы t2? smile 

пример
t1
---------------------------------
id1 ..... data
---------------------------------
1 ..... blablabla
2 ..... blablabla
3 ..... blablabla
4 ..... blablabla
5 ..... blablabla
6 ..... blablabla
7 ..... blablabla
8 ..... blablabla
9 ..... blablabla

t2
---------------------------------
id2
---------------------------------
1
2
8
9

соотв. строки с t1.id1 IN (1,2,8,9) нас не интересуют - нужна любая рандомная строка из t1, кроме этих
как все же лучше сделать? подскажите, желательно одним запросом и без IN, т.к. t2 содержит до сотни тысяч записей - это будут очень длинные запросы
PM MAIL   Вверх
Рыжий
Дата 23.6.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Помешанный
***


Профиль
Группа: Завсегдатай
Сообщений: 1423
Регистрация: 19.9.2004

Репутация: 1
Всего: 20



Цитата(realPROme @  23.6.2009,  16:38 Найти цитируемый пост)
соотв. строки с t1.id1 IN (1,2,8,9) нас не интересуют - нужна любая рандомная строка из t1, кроме этих

Все просто:
Код

... WHERE t1.id1 NOT IN (1,2,8,9) ORDER BY RAND() LIMIT 1;


Это если с IN

Это сообщение отредактировал(а) Рыжий - 23.6.2009, 19:15
PM MAIL ICQ   Вверх
realPROme
Дата 23.6.2009, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



Рыжий, да оно так и есть, благодарю
но вариантов реализации без использования IN нет?
PM MAIL   Вверх
solenko
Дата 23.6.2009, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 7
Всего: 67



realPROme, 
Код

SELECT * FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE t2.id2 IS NULL ORDER BY RAND() LIMIT 1

 ORDER BY RAND() на больших объемах данных будем очень плохо работать


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
realPROme
Дата 23.6.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



solenko, прям то что вертелось в голове! smile
весьма интересная реализация smile
премного благодарен smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.1194 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.