Как сделать правильный запрос

Статус
В этой теме нельзя размещать новые ответы.

Icevip

Новичок
Как сделать правильный запрос

Пусть есть массив $mas1={1,2,3,...,100} и таблица с полем 'mas2'=[1,4,7,10,45].
Как выбрать из таблицы все записи, элементы которох в поле mas2 имелись бы в массиве $mas1 ?
 

Bitterman

Новичок
Wicked
Ну да, я просто хотел принцип показать и воткнул первые цифры, которые на глаза попались ))
 

Icevip

Новичок
Ясно, вот только данные в поле mas2 хранятся в виде:
mas2={[1][3][23][43][55][53][44][7][8][6][33]...},
а в массиве $mas1={1,2,3,...,100}...
Я делаю так:
Беру каждую запись из таблицы(последовательно), извлекаю элеметны из поля 'mas2' в переменную $tmp, затем проверяю, есть ли все элемены $tmp в $mas1: in_array() и если это условие выполняется ,то вывожу эту запись.
Все работает, но очень долго..., вот я и хочу оптимизировать этот алгоритм.
 

Фанат

oncle terrible
Команда форума
чтобы оптимизировать этот "алгоритм", надо выкинуть поле mas2 на помойку, и сделать его ТАБЛИЦЕЙ.
как ты по ошибке написал в своем вопросе.
 

Icevip

Новичок
Автор оригинала: *****
чтобы оптимизировать этот "алгоритм", надо выкинуть поле mas2 на помойку, и сделать его ТАБЛИЦЕЙ.
как ты по ошибке написал в своем вопросе.
То есть ты предлагаешь вместо этого поля сделать таблицу с более чем 200 полями? А еще хуже не станет.
 

Icevip

Новичок
Автор оригинала: Армян
:-О

помойму можно реализовать с 2 полями: id, value
Хорошо, допустим я сделал таблицу с 2 полями:
id={1}
twofield={[2][3][4][5][6][7][8][43][150]............}

Как теперь из поля twofield выбрать такие записи(см.выше)?
 

Армян

Новичок
суть такова чтобы в одном поле хранить одно значение. т.е. должна получится таблица типа
id value
1 4
1 5
1 6
1 7
2 3

т.е. поле id служит для связи с основной таблицей
 

Фанат

oncle terrible
Команда форума
что за дурацкая манеера писать скобочки?

id=1, twofield=2
id=1, twofield=3
id=1, twofield=4
id=1, twofield=5
 

Icevip

Новичок
А, если так... Попробую сделать.

-~{}~ 31.07.07 11:06:

Таблицу сделал, а как сделать запрос не могу сообразить.
Получается нужно выбрать записи из этой новой таблицы, чтобы все twofield были в массиве $mas1 и Id был один и тот же, или не так?
 

Icevip

Новичок
Можно поподробнее. Просто с MySQL я работаю недавно и не все еще разобрал в нем.
 

Фанат

oncle terrible
Команда форума
where id=твой id and twofield in (твой массив через запятую)
если ты, конечно, таблицу сделал, как надо
 

Icevip

Новичок
Автор оригинала: *****
where id=твой id and twofield in (твой массив через запятую)
если ты, конечно, таблицу сделал, как надо
ОК, сделал все как ты написал, работает, но... выводятся такие записи, в которых имеется хотябы один элемент из "массива через запятую", а мне нужно, чтобы в этом "массиве" были ВСЕ элементы записи.
Наверное нужно как-то подкорректировать твой запрос.
 

Bitterman

Новичок
[SQL]SELECT ID, COUNT(DISTINCT twofield) as Number FROM `table`
WHERE twofield IN (1, 2, 3, ...)
GROUP BY ID
HAVING Number='число элементов в массиве'[/SQL]
Что-то вроде этого. При этом элементы массива не должны повторяться.
Последнее время проскакивали похожие темы, смотри в поиске
 

Фанат

oncle terrible
Команда форума
выводятся такие записи, в которых имеется хотябы один элемент
Ты говоришь невозможные вещи. "хотя бы один" элемент там не может быть. поскольку в каждой записи И ЕСТЬ ТОЛЬКО ОДИН ЭЛЕМЕНТ!
 

Icevip

Новичок
Автор оригинала: *****
Ты говоришь невозможные вещи. "хотя бы один" элемент там не может быть. поскольку в каждой записи И ЕСТЬ ТОЛЬКО ОДИН ЭЛЕМЕНТ!
Согласен, в каждой записи только один элемент:
id=1, twofield=2
id=1, twofield=3
id=1, twofield=4
id=1, twofield=5

Тогда, если массив состоит из (1,2,7), то выведится из таблицы:
id=1, twofield=2
так как в массиве есть "2",а нужно, чтобы записи выводились, если в массиве были бы, например (1,2,3,4,5,6),
и в протисном случае ничего не выводилось.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху