|
|
|
| Здравствуйте!
У меня появилась проблема с реализацией запроса с применением получения поля с множеством (1,2,3,4) и задача его как аргумента в IN(). Проблема заключается в том, что из этой строки "1,2,3,4" срабатывает лишь первое значение, как это можно альтернативно реализовать или дело в параметрах настройки MySQL? Спасибо.
SELECT `name`, `id` FROM `table` WHERE `id` IN (SELECT `values` FROM `tableTwo` WHERE `uri` = `string`)
|
В результате получается лишь одна строка, хотя должно быть больше. | |
|
|
|
|
|
|
|
для: deniel
(06.01.2010 в 00:48)
| | Почитай в мануале что есть IN (SELECT ...). Это не функция. | |
|
|
|
|
|
|
|
для: deniel
(06.01.2010 в 00:48)
| | Можете прикрепить к сообщению дампы таблиц table и tableTwo чтобы можно было воспроизвести ситуацию? | |
|
|
|
|
|
|
|
для: cheops
(06.01.2010 в 14:56)
| | Нашел решение данной проблемы в рецептах Энтони Молинаро.
SELECT `nbr` FROM `Table1`
WHERE `nbr` IN ((SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(list.vals,',',iter.pos),',', -1) `nbr`
FROM (SELECT `nbr` pos FROM `Table1`) as iter,
(SELECT `nbrs` as vals FROM `Table2`) list
WHERE iter.pos <= (length(list.vals) - LENGTH(REPLACE(list.vals,',','')))+1))
|
-- Table1 Table
CREATE TABLE IF NOT EXISTS `Table1` (
`nbr` int(10) unsigned NOT NULL default 0,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`nbr`)
) ENGINE=MyISAM;
-- Table2 Table
CREATE TABLE IF NOT EXISTS `Table2` (
`this_nbr` int(10) unsigned NOT NULL default 0,
`nbrs` varchar(255) NOT NULL default '',
PRIMARY KEY (`this_nbr`)
) ENGINE=MyISAM;
INSERT INTO `Table1` VALUES (1,'string')
INSERT INTO `Table2` VALUES (1,'1,2,3,4,5')
|
| |
|
|
|
|
|
|
|
для: deniel
(06.01.2010 в 20:29)
| | Мне интересно с какой целью необходимо всё пихнуть в 1 (один) запрос. Неужели это читабельнее, чем 2 запроса, но более простых? Или ты уверен, что 1 (один) запрос будет быстрее? | |
|
|
|
|
|
|
|
для: Fractured#
(06.01.2010 в 21:01)
| | Проверил, один запрос выполняется такого вида в 3.2 раза дольше, чем разделенный на два отдельных запроса; дело в цикличности конструкции WHERE. | |
|
|
|