Вопрос № 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