Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2013, 03:43   #1
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию Запрос. Много условий (or)

необходимо сделать выборку записей, по известным значениям полей.
т.е. есть список значений (допустим их 1000), и надо выделить записи, в которых встречается это значение.
сразу скажу, что значения идут вразнобой и не по порядку, т.е. нельзя написать что-то типа (C1 >= 'v1') and (C1<=v2500)
надо проверять отдельно каждое значение

по логике запрос должен быть таким:
SELECT * FROM MyTable WHERE (C1='v1') or (C1='v2') or (C1='v3') ... or (C1='v2500')

но что-то мне подсказывает, что такой запрос база не схавает...
в MySQL вообще предусмотрены такие ситуации?

или это все ручками надо делать?


ах да, на всякий случай:
если нужно искать совпадение значений, то можно каждое значение искать отдельно,
а что если нужно искать НЕсовпадение со всеми 2500 значениями?

Последний раз редактировалось xrob; 11.05.2013 в 03:46.
xrob вне форума Ответить с цитированием
Старый 11.05.2013, 09:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Вообще-то WHERE C1 IN ('v1',...), но не для такого кол-ва условий - будет очень тормозно, если вообще MySQL его съест. Делать временную таблицу, загонять туда эти значения и в запросе работать с таблицей. В том числе и для НЕсовпадения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.05.2013, 09:18   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В этом случае явно на лицо неверная тактика работы с БД.
Откуда у тебя значения v2500 и типа того? Почему они обязательно стоковые?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 18:15   #4
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

У меня есть много записей и в базе есть много записей.
И я хочу получить из базы все записи, которых нет у меня.

Кстати, не знаю что значит "стоковые" =)
дилетант, да...
или может вы "строковые" имели ввиду? в php вроде кроме строковых других типов и не существует...
дададада, я знаю, знаю, напридумывано много всяких типов, но представлены то они все-равно строчками..
v* - это id записей (1, 2, 5, 658, 8451645 и т.д.)


И да, пересмотрел алгоритм...
Теперь прога получает все id в базе, и сама определяет, какие еще ей нужны,
а потом запрашиваются из базы конкретные id

Аватар, временная это heap?
xrob вне форума Ответить с цитированием
Старый 11.05.2013, 18:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не знаю что значит "стоковые"
Очепятка.
Цитата:
в php вроде кроме строковых других типов и не существует...
А причем тут ПХП? Я спрашиваю зачем ты помещаешь значения типа V256 в базу?
Что они означают?
Короче, чтоб без флуда: Есть справочник обозначений:
Цитата:
1 v
2 b
3 g
4 что там еще за буквы
И MyTable у которой есть поля
Код буквы
Значение для суффикса.
В результате
Код:
select [справочник обозначений].Буква+[Значение для суффикса]
from MyTable 
join [справочник обозначений] on [справочник обозначений].код=MyTable.[Код буквы]
where [Значение для суффикса] between 100 and 2500
Который сольет тебе букву и ее значение, выбрав те у которых суффиксы от 100 до 2500.

Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.05.2013, 20:05   #6
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Цитата:
причем тут ПХП?
ух, извините, я совсем запутался во всем этом...
пытаюсь наладить совместную работу сайта с php и MySQL и проги на Delphi...

Stilet, вы слишком буквально меня поняли, буковка v не имеет значения,
это просто сокращенно value, а С1 соответственно Col1 (столбец 1).
это я просто для примера написал, чтобы показать что необходимо строгое сравнение значений,
чтобы не писали про < >

Цитата:
Что они означают?
это id записей. они создаются автоматически (без буковки)

И, к сожалению, полет вашей мысли оценить не смог,
ибо не владею ни php, ни sql на достаточном уровне...
Но за внимание спасибо!
xrob вне форума Ответить с цитированием
Старый 11.05.2013, 20:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
слишком буквально меня поняли
Тогда
Код:
SELECT * FROM MyTable WHERE C1 in (select [поле со значениями] from [таблица где содержатся эти значения])
таблица где содержатся эти значения содержит v1, v2 и все остальные.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование условий в С++ Sid_P Помощь студентам 4 14.10.2012 17:54
Вложенные функции или слишком много условий OgE®_M@G Microsoft Office Excel 4 03.11.2011 07:35
Проверка условий advanced PHP 3 23.01.2011 12:10
Вопрос на тему условий Richmond_87 Паскаль, Turbo Pascal, PascalABC.NET 1 08.01.2009 16:35