Forum Webscript.Ru
Общие => Базы данных => Тема начата: Petroffs от 28 Января 2004, 15:02:53
-
вот 10 позиций по которым можно делать выборки, в
зависимости от того что надо юзеру:
user_nickname varchar(30) NOT NULL,
user_age date DEFAULT \'0000-00-00\',
user_foto1 varchar(50),
user_foto2 varchar(50),
user_foto3 varchar(50),
user_country_id smallint(4) DEFAULT \'0\',
user_city_id smallint(6) DEFAULT \'0\',
user_icq int(11) DEFAULT \'0\',
user_sex tinyint(4) DEFAULT \'0\' NOT NULL,
user_email varchar(50) NOT NULL,
можно ли как нибудь укоротить WHERE, а то оная
получается до неприличия длиной со своими AND и OR?
-
здесь форум о базах данных, а не о приличиях.
если ты считаешь, что можно зсделать запрос про всем полям и не перечислить их в условии, то ты весьма недалекий человек.
советую больше думать головой.
-
Я спросил о производительности, ничего мол страшного, если в WHERE будет достаточно большое условие?
[OFF]Советую не делать скоропалительных выводов[/OFF]
-
Petroffs
расслабься, при запросе к БД надо описывать точно, какие тебе данные нужны, если ты не сделаешь это в запросе, тебе прийдется делать это в программе, поэтому, если для описания условий, тебе понадобится десять AND то их надо писать! в конце-концов, если ты уменьшишь количество AND то в результате запроса могут появиться данные, которые не удовлетворяют условиям и тебе их надо будет тоже отфильтровать, эта задача ляжет на плечи твоего приложения, т.е. ты все равно потеряешь время на обработку, подумай, не лучше ли предоставить обработку данных тому серверу, который был написан специально для этого?
В случае с UPDATE тебе вообще надо строго описывать ВСЕ условия после where иначе ты рискуешь повредить записи, которые ты не хочешь менять.
-
Yukko:
подумай, не лучше ли предоставить обработку данных тому серверу, который был написан специально для этого
Вот этой фразы я что-то совсем не понял...
или может слово "сервер" подразумевает слово "скрипт"?
-
запрос то работает, но при 2 000 записей в таблице, процессор напрягается вообще-то, но этого похоже неизбежать..
-
слабый у тебя какой-то процессор.
если же учесть, что в поиске одновременно будут участовать максимум 2-3 поля, то об этой, высосанной из пальца, проблеме можно забыть
-
да у меня на компе все работает шустро, но боюсь, что при
выкладке к хостеру будут различные ограниченя на
оперативную память и еще какие-нибудь там штуки...
в общем - то у меня на компе, а то - у хостера
и 2-3 поля - это минимум, а максимум, около 6ти получается
-
Petroffs:
но боюсь
а ты не бойся.
Petroffs:
максимум, около 6ти получается
приведи пример такого поиска.
Условие: человек, который ищет - не дебил.
-
ЗЫ. действительно "большой" where - это на экран и более.
а у тебя - это самый обычный.
-
Аха, завтра покажу, щас я на работе, а то страшное
where дома покоится... а может вовсе и не страшное:)
-
Petroffs:
Вот этой фразы я что-то совсем не понял...
или может слово "сервер" подразумевает слово "скрипт"?
Обработку ДАННЫХ надо предоставлять серверу баз ДАННЫХ.
[OFF]я что не по-русски пишу?[/OFF]
-
Yukko:
Обработку ДАННЫХ надо предоставлять серверу баз ДАННЫХ.
[OFF]ОК... слышу я, слышу ;)[/OFF]
-
зачем домой ходить?
мы имеем 10 полей.
из них по трем поиск не производится.
user_foto1 varchar(50),
user_foto2 varchar(50),
user_foto3 varchar(50),
два уникальных, и искать в комплексе бессмысленно
user_icq int(11) DEFAULT \'0\',
user_email varchar(50) NOT NULL,
Два взаимоисключающих.
user_country_id smallint(4) DEFAULT \'0\',
user_city_id smallint(6) DEFAULT \'0\',
Из них берется одно плюс лежащие ниже три
user_nickname varchar(30) NOT NULL,
user_age date DEFAULT \'0000-00-00\',
user_sex tinyint(4) DEFAULT \'0\' NOT NULL,
итого - максимум 4 если делать нечеткий поиск по имени.
по емейлу, правда, тоже можно сделать лайк.
Но это будет 5 максимум, которые пересекаться будут в совершенно уникальных случаях, когда человек ищет одновременно по части имени и емейла.
-
зачем мне лайк использовать?
это если по нику или по емаил только, правильно?
я тут селектом выборку делаю
RomikChef:
Два взаимоисключающих.
user_country_id smallint(4) DEFAULT \'0\',
user_city_id smallint(6) DEFAULT \'0\',
они не взаимоисключающие, потому как не у каждой страны есть город...... например, Австрия...... у меня там городов не обозначено......
RomikChef:
зачем домой ходить?
мы имеем 10 полей.
из них по трем поиск не производится.
в фото индексы стоят, мол 1 - да, 0 - нет,
и поиск по ним производится, либо по фото1 либо 2 либо 3..
но суть твоего пояснения ясна... спасибо.....
-
Petroffs:
они не взаимоисключающие, потому как не у каждой страны есть город
гы гы гы :-)
радуешь ты меня.
Мощью логического аппарата :-)
А про поиск по фотографиям - это поподробнее, пожалуйста.
Я, к стыду своему, так и не понял принципа.
Это сайт знакомств что ли? Поиск с наличием фотографии? или что? Какая логика? Искать человека с именем, начинающимся на "Вас" и меющего три фотографии? Ну-ну. Если у тебя такие юзеры - тебе можно только посочувствовать.
-
не у каждой страны есть город
это я про то что у меня в БД
(http://www.omron.spb.ru/off/11.gif)
SELECT user_id,user_nickname,okrug_name,user_age
FROM user left join okrug on user.user_okrug_id = okrug.okrug_id
WHERE user_country_id=108
AND DATE_ADD(user_age, INTERVAL 15 YEAR) <= CURDATE()
AND DATE_ADD(user_age, INTERVAL 19 YEAR) > CURDATE()
AND user_sex=1
AND (user_foto1=1 OR user_foto2=1 OR user_foto3=1)
AND user_okrug_id=161;
-
И интервалом дат, думаю можно проще обойтись......
А как ......
-
SELECT * FROM tbl_name WHERE date >= \'1997-05-05\';
нашел
-
ничего не понял в этом запрое.
при чем тут город?
а тормоза у тебя от джойна без индексов
-
про город:
есть 2 таблицы - country, okrug
CREATE TABLE country (
country_id smallint(6) DEFAULT \'0\' NOT NULL,
country_name varchar(60) NOT NULL,
PRIMARY KEY (country_id)
);
CREATE TABLE okrug (
okrug_id smallint(6) DEFAULT \'0\' NOT NULL,
okrug_name varchar(60) NOT NULL,
okrug_country_id smallint(6) DEFAULT \'0\' NOT NULL,
PRIMARY KEY (okrug_id)
);
okrug.okrug_country_id = country.country_id
для некоторых стран у меня городов нету, что здесь непонятного?
у меня 234 страны, я с ума сойду для каждой город искать....
основные страны у меня имеют города, а непосредственные - нет.
а без джоина никак...... ибо мне надо показывать город юзера, а
запрос выдает циферку, вот я и заменяю эту циферку городом, при
наличии такового, конечно.
-
[off]
Petroffs:
основные страны у меня имеют города, а непосредственные - нет.
"Круто взнуздано" - так и не смог себе этого представить
[/off]
Petroffs:
а без джоина никак......
а тебе никто и не предлагает не использовать JOIN.
Насколько я понял из прочитанного
RomikChef:
тормоза у тебя от джойна без индексов
Ссылку на документацию дать?
У тебя okrug_country_id не проиндексирован - поэтому у тебя и ищется полным перебором, а это и влияет на производительность
-
У меня 234 страны