Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Условие в самом запросе


Автор: supercelt 1.2.2008, 14:26
Код

$q=mysql_query("SELECT id, City, Address, Phone, Fax FROM iapp_bsfirms EHERE City....... ORDER BY id");


Как написать? Вместо точек надо поставить такое условие: где City либо любое число, либо пустое поле

HELP

Автор: merge 1.2.2008, 14:29
City = 5 OR City is NULL

Автор: GeneralElectric 1.2.2008, 14:44
supercelt, а что в поле может быть кроме числа и пустого значения?

Автор: MoLeX 1.2.2008, 14:46
Цитата(supercelt @  1.2.2008,  14:26 Найти цитируемый пост)
 EHERE

а такое то есть  smile!
всегда думал что WHERE

Автор: supercelt 1.2.2008, 14:56
Знаю что WHERE, просто опечатка)), в поле может быть ещё вот что: Санкт-Петербург и тд. Merge, а почему ты пишешь, что City = 5. Там надо любое число. Главное что это число, а какое, не важно

Автор: GeneralElectric 1.2.2008, 15:03
supercelt, а, может, лучше сделать так, чтобы там были только числа?
тебе вообще этот запрос один раз нужен, или постоянно для работы приложения?
Если для того, чтобы привести базу в нормальную форму, то можно как-то извратиться. А если так и пранируется все время делать, то лучше не стоит

Автор: supercelt 1.2.2008, 15:08
Будет использоваться всего один раз. Просто базу надо поправить. В поле города, кое-где неверно записано. Там где числа и пустые, те надо вывести, что бы не выводить всё несколько тысяч строк.

Автор: bars80080 1.2.2008, 15:19
если один раз, то может лучше вывести все, а затем проверить средствами пхп, типа is_numeric and empty ?

Автор: skyboy 1.2.2008, 15:22

M
skyboy
При чем тут PHP, если цель - сделать средствами MySQL? Едем в "базы даных: mysql"

Можно воспользоваться оператором http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_regexp типа
Код

WHERE `City` is NULL OR `City` REGEXP "^[[:digit:]]*$"

только обрати внимание на примечание в мануале: регистрозависимая и проблема с многобайтными кодировками :(

Автор: skyboy 1.2.2008, 15:43
Цитата(bars80080 @  1.2.2008,  14:19 Найти цитируемый пост)
если один раз, то может лучше вывести все

если резульатат выборки используется в качестве подзапроса и связывается по JOIN или используется в "IN ...", то вариант с передачей сервер-клиент-сервер двойная переброска будет тормозить. Сильно. Уж лучше привести(если есть) текст к однобайтной кодировке и воспользоваться REGEXP

Добавлено через 1 минуту и 10 секунд
Цитата(skyboy @  1.2.2008,  14:43 Найти цитируемый пост)
воспользоваться REGEXP

или http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html

Автор: supercelt 1.2.2008, 16:38
Код

WHERE `City` is NULL OR `City` REGEXP "^[[:digit:]]*$"


Не работает. Выводит все записи из базы

Автор: GeneralElectric 1.2.2008, 16:55
а я бы написал City+1 > 1

Автор: skyboy 1.2.2008, 17:00
Цитата(supercelt @  1.2.2008,  15:38 Найти цитируемый пост)
Выводит все записи из базы

среди этих "всех" есть те, которые не из чисел?
кодировка в таблице какая? 
обращаю ещё раз внимание:
Цитата(skyboy @  1.2.2008,  14:22 Найти цитируемый пост)
регистрозависимая и проблема с многобайтными кодировками


Автор: supercelt 1.2.2008, 17:32
Выводит абсолютно всё.. Кодировка windows-1251

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)