Получить строку по образу REGEXP (например, email) из ячейки

Alexei772
Дата: 13.02.2013 01:01:41
Что-то часто я стал иметь дело с запросам в БД, обычно я работаю с готовыми данными. А тут не так.
У меня есть база с покупателями. Все данные хранятся о покупателе в одной ячейке (телефон, адрес и пр... короче жесть...)

Я решил через регулярку, которой обычно пользуюсь, (по простому обычаю пхп) получить email из ячейки с данными о покупателе.

Я составил такой запрос, он выполнился без ошибок, но к сожалению в колонке email все значения были 0, это меня тоже смущает, потому что согласно этому выраженитам должны были быть 1, потому что у все покупателей есть email...

	select 
		 * 
		,`customer` REGEXP "/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i" as `email` 
	from `reserve` 
	where UNIX_TIMESTAMP(`till`) > UNIX_TIMESTAMP(NOW())


Я понимаю что допустил как минимум две ошибки. Может быть регулярное выражение не подходит... хотя в других случаях в коде с пхп я им управляюсь... но меня волнует другой факт: возможно ли через регулярное выражение получить данные из ячейки?...
miksoft
Дата: 13.02.2013 01:10:17
не пойму, зачем в регулярке дробь в начале и "+/i" в конце
Alexei772
Дата: 13.02.2013 01:15:37
согласен, вечернее время сказывается...
Alexei772
Дата: 13.02.2013 01:19:11
а можно ли как-нить мою задачу решить?...
Stupid_BOT
Дата: 13.02.2013 01:23:47
Alexei772,

> возможно ли через регулярное выражение получить данные из ячейки?...

Нет. Оператор REGEXP возвращает булево значение.
Для возврата части строки - только SUBSTRING().


> Может быть регулярное выражение не подходит... хотя в других случаях в коде с пхп я им управляюсь...

Синтаксис отличается от пхп-шного.
miksoft
Дата: 13.02.2013 01:24:48
Alexei772
а можно ли как-нить мою задачу решить?...
а разве, если убрать дробь и "+/i", задача не решается?
Stupid_BOT
Дата: 13.02.2013 01:27:10
Alexei772
а можно ли как-нить мою задачу решить?...
На клиенте парсить - не вариант ?
Alexei772
Дата: 13.02.2013 01:34:20
задача такая

1 .выбрать из колонки `customer` его email

2. потом сгруппировать все email, чтобы не было дублей

3. потом сделать повторный запрос в базу на выборку всех товаров с "дата разерва на складе больше сегодня" = UNIX_TIMESTAMP(`till`) > UNIX_TIMESTAMP(NOW())

4. а потом разослать по почте всем напоинания о резервах товара...


я хотел 1 и 2 сделать таким образом:

	select 
		 * 
		,`customer` REGEXP "/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i" as `email` 
	from `reserve` 
	where UNIX_TIMESTAMP(`till`) > UNIX_TIMESTAMP(NOW()) 
	group by `email` 


невозможно такое?
Alexei772
Дата: 13.02.2013 01:41:08
miksoft
Alexei772
а можно ли как-нить мою задачу решить?...
а разве, если убрать дробь и "+/i", задача не решается?


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

нашел интересную функцию http://www.mysqludf.org/lib_mysqludf_preg/, но мне админ хостинга ее не поставит...
Alexei772
Дата: 13.02.2013 01:41:33
Stupid_BOT
Alexei772
а можно ли как-нить мою задачу решить?...
На клиенте парсить - не вариант ?


ответ с задачей был на это сообщение...