MySQL Split для использования в операторе “SELECT WHERE IN”

Я обыскивал различные сайты MySQL в надежде на нахождение чего-то, что позволит мне поворачивать это:

var parameters = "a,b,c,d"; // (Could be any number of comma-delimited values)

В это (предполагающий, что мои параметры так или иначе становятся значениями, которые Вы видите в В блоке):

SELECT * FROM mytable WHERE parametertype IN('a', 'b', 'c', 'd');

Но я не имею большой успех! Лучший сайт, который я нашел, был: dev.mysql.com, который обсуждает разделение строк на основе разделителя ('', в моем случае), хотя это не подняло ответов...

Кто-либо знает о хорошем способе разделить разграниченную запятой строку на группу строк, которые могут использоваться в этом контексте?

7
задан Daniel May 2 February 2010 в 16:19
поделиться

2 ответа

Для кода сервера, т. е. оконечные устройства должны соответствовать норме. для xap, я думаю, у вас есть несколько вариантов в зависимости от того, как вы управляете коммуникациями. Возможно, запрос содержит номер версии, и если сервер был обновлен, принудительно загрузите какой-либо код для перезагрузки клиента, битовый lame, грязный, но выполнимый. Возможно, более чистым решением было бы управление сеансом клиентов, который, предположительно, является частью и посылкой с запросами в заднюю часть. При развертывании новой версии сеанс клиента может стать недействительным, что, возможно, приведет к обновлению страницы с помощью пользовательской логики. Если ваш протокол является push base вы можете отправить команду клиенту, чтобы сделать то, что вы хотите, для многих систем, которые находятся в течение всего дня его вероятность того, что эта инфраструктура будет существовать (если вы создали его красиво:)). Например, наш уровень обслуживания абстрагирован от моделей репозиториев и моделей просмотра, в нашем случае мы могли бы отправить выход из системы или, возможно, конкретную команду, чтобы ввести на клиенте некоторую пользовательскую логику, информирующую об обновлении приложения и обновить ваш браузер, когда это будет сделано. Наша оболочка легкая, поэтому наши модули (в основном другие xap) могут быть обновлены во время обновления.

-121--3753605-

Это связано с работой пути MKMapView . Ожидается операция, поэтому MapKit сохраняет MKMapView , и фактически он еще не был удален. Это сама по себе не проблема. Проблема в том, что он по-прежнему отправляет сообщения делегату.

Обходной путь прост: В рамках очистки контроллера вида установите делегат представления карты на nil , что не позволит MKMapView отправлять ему сообщения.

Это задокументировано в Ссылка на протокол MKMapViewDelegate :

Перед освобождением объекта MKMapView, для которого задан делегат, не забудьте установить для свойства делегата этого объекта значение nil. Одно место, где это можно сделать, - это метод dealloc, в котором используется вид карты.

Правка: Дайте Оскару еще одно слово, чуть ниже, который привел здесь цитату из документации.

Учитывая ARC, я предлагаю установить делегат представления карты на nil в dealloc контроллера представления.

-121--1514281-

Возможно, он не обладает всей необходимой гибкостью, но функции MySQL FIND _ IN _ SET может быть достаточно. Существует жесткий предел максимум 64 значений в наборе для сравнения.

Например:

SELECT  *
FROM    mytable
WHERE   FIND_IN_SET( parametertype, 'a,b,c,d' ) != 0

Это пример использования встроенного MySQL SET ('a, b, c, d') - своего рода перечисления. Это может быть признаком того, что что-то не соответствует нормализации модели данных, если они используются. Но они могут быть полезны для исключения соединения или (как в данном случае) для связывания со сложной информацией, находящейся вне базы данных.

6
ответ дан 7 December 2019 в 10:01
поделиться

Попробуйте реализовать поиск в глубину сначала рекурсивно и итеративно и скажите, какой из них дал вам более легкое время. Или объединить сортировку. Для многих проблем это сводится к явному ведению собственного стека по сравнению с оставлением данных в стеке функций.

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

-121--942473-

Итерация более эффективна, чем Рекурсия, верно?

Необязательно. Эта концепция исходит из многих C-подобных языков, где вызов функции, рекурсивной или нет, имел большие накладные расходы и создавал новый стековый кадр для каждого вызова.

Для многих языков это не так, и рекурсия одинаково или более эффективна, чем итеративная версия. В настоящее время даже некоторые компиляторы C переписывают некоторые рекурсивные конструкции в итеративную версию или повторно используют кадр стека для последнего рекурсивного вызова.

-121--942457-

вы можете использовать динамический sql


delimiter //; 
create procedure tst() 
begin 
prepare stmp from 'INSERT INTO LOGG SELECT PFILE_Filename FROM PFILE_FILE'; 
execute stmp; 
deallocate prepare stmp; 
end// 
delimiter ;//

вы должны сделать что-то подобное

у вас есть часть sql-запроса

 SELECT * FROM mytable WHERE parametertype IN( 
, затем вы соединяете его со строкой, переданной в качестве параметра «» a «», «» b «», «» c «», «» d «» с помощью функции CONCAT например, в stmp, как описано выше, а затем выполнить stmp
0
ответ дан 7 December 2019 в 10:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: