Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 139
от 29.08.2006, 22:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 337, Экспертов: 44
В номере:Вопросов: 1, Ответов: 4


Вопрос № 53172: Здравствуйте, эксперты! В одном из полей таблицы хранится список чисел (пример в приложении). Количество чисел и они сами заранее неизвестны. Нужно выбрать из таблицы те записи, в которых в этом поле есть, например, число 114. Используется MySQL....

Вопрос № 53.172
Здравствуйте, эксперты!
В одном из полей таблицы хранится список чисел (пример в приложении). Количество чисел и они сами заранее неизвестны. Нужно выбрать из таблицы те записи, в которых в этом поле есть, например, число 114. Используется MySQL. Вопросы:
1) Какой тип поля выбрать?
2) Как написать SQL-запрос?
Заранее спасибо :)

Приложение:

Отправлен: 24.08.2006, 22:34
Вопрос задал: Nik-VB (статус: 2-ой класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Nik-VB!
1. Тип поля будет, или VARCHAR, или TEXT. Для типа VARCHAR максимальное число знаков составляет 255, для типа TEXT - от 2^8-1 до 2^32-1.

2. Как мне кажется сделать это средствами MySQl не возможно, т.к. при использовании следующего запроса (Приложение 1) будут выбраны строки со значениями 1114, 11114, 2114 и т.д. При добавлении запятых ( Приложение 2) строки в которых 114 строи в начале или в конце строки выбраны не будут.

Т.ч. подводя итог могу сказать, что придется использовать запрос из приложения 1, а затем регулярными выражениями в PHP или Perl выбирать нужную строку.

Приложение:

---------
Вы доставили мне истинное удовольствие парни, взвалив на меня Ваши проблемы (М. Фрай).

Ответ отправил: Козлов Алексей Сергеевич (статус: 6-ой класс)
Ответ отправлен: 24.08.2006, 23:15

Отвечает: din
Здравствуйте, Nik-VB!
Здесь целые числа и поэтому можно выбрать типы smallint, integer или bigint все зависит от возможного максимального занчения. А что касается выборки, то все очень просто:
SELECT * FROM имя_таблицы WHERE имя_поля = 114;

Удачи!
---------
Есть только одно зло - невежество, и только одно благо - знания
Ответ отправил: din (статус: Студент)
Ответ отправлен: 24.08.2006, 23:18

Отвечает: Madproger
Здравствуйте, Nik-VB!

Поясню второй ответ дина так как думаю точно так же

У вас есть к примеру таблица
table1 где хотите сделать поле с набором этих чисел - это не есть гут
Переделаейте таблицу table1 оставив в ней все поля которые есть кроме поля со списком и дабавьте в эту таблицу PRIMARY KEY к примеру id
У вас получится следующее
CREATE TABLE table1
(
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
field1 int,
field2 varchar(100)
);

И создайте таблицу номер 2 где все перечисленные числа будут привязаны к таблице один по PRIMARY KEY
CREATE TABLE table2
(
id int NOT NULL, // id из певрой таблицы
numbers int NOT NULL
);

И потом уже поиск по двум таблицам
например из таблицы 1 у первого элемента надо найти число 114 Простейший пример запроса
SELECT t1.id FROM table1 as t1, table2 as t2 WHERE t2.numbers=114 AND t1.id=t2.id LIMIT 1;

---------
И будет вам счАстиЕ!
Ответ отправил: Madproger (статус: 9-ый класс)
Ответ отправлен: 25.08.2006, 00:15

Отвечает: Хватов Сергей
Здравствуйте, Nik-VB!

Вообще-то так делать не положено.

Надо завести для значений отдельную таблицу.
В исходной таблице надо иметь ID строки, а в дополнительной поля должны быть ID (ссылка на строку исходной таблицы) и Value (значение)

Запрос будет типа такого:

Приложение:

Ответ отправил: Хватов Сергей (статус: 2-ой класс)
Ответ отправлен: 25.08.2006, 11:33


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное