Следует отметить, что были реализованы функции безопасности, которые требуют, чтобы приложение запускалось локально под локальным хостом или через SSL для GetUserMedia () для работы.
Я обнаружил это при попытке нескольких демонстрации доступны и были разочарованы, когда они не работали! См. Новые ограничения безопасности
MYSQL не имеет встроенной функции explode()
. Но вы можете легко добавить аналогичную функцию к своей БД, а затем использовать ее из php-запросов. Эта функция будет выглядеть так:
CREATE FUNCTION SPLIT_STRING(str VARCHAR(255), delim VARCHAR(12), pos INT)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1),
delim, '');
Использование:
SELECT SPLIT_STRING('apple, pear, melon', ',', 1)
Приведенный выше пример вернет apple
. Я думаю, что будет невозможно вернуть массив в MySQL, поэтому вы должны указать, какое из ячеек должно явным образом возвращаться в pos
. Дайте мне знать, если вам удастся его использовать.
Как указывал @ arman-p, у MYSQL нет explode (). Однако я считаю, что решение представлено гораздо сложнее, чем нужно. Чтобы выполнить быструю проверку, когда вам задана строка списка с разделителями-запятыми (например, список ключей таблицы для поиска), вы делаете:
SELECT
table_key, field_1, field_2, field_3
FROM
my_table
WHERE
field_3 = 'my_field_3_value'
AND (comma_list = table_key
OR comma_list LIKE CONCAT(table_key, ',%')
OR comma_list LIKE CONCAT('%,', table_key, ',%')
OR comma_list LIKE CONCAT('%,', table_key))
Это предполагает, что вам также необходимо проверить поле_3 на стол тоже. Если вам это не нужно, не добавляйте это условие.
Я пытаюсь использовать SUBSTRING_INDEX(string,delimiter,count)
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
подробнее о mysql.com http://dev.mysql.com/doc/refman/5.1/en/string-functions. HTML # function_substring индекс
Вы можете использовать хранимую процедуру таким образом.
DELIMITER |
CREATE PROCEDURE explode( pDelim VARCHAR(32), pStr TEXT)
BEGIN
DROP TABLE IF EXISTS temp_explode;
CREATE TEMPORARY TABLE temp_explode (id INT AUTO_INCREMENT PRIMARY KEY NOT NULL, word VARCHAR(40));
SET @sql := CONCAT('INSERT INTO temp_explode (word) VALUES (', REPLACE(QUOTE(pStr), pDelim, '\'), (\''), ')');
PREPARE myStmt FROM @sql;
EXECUTE myStmt;
END |
DELIMITER ;
SET @str = "The quick brown fox jumped over the lazy dog";
SET @delim = " ";
CALL explode(@delim,@str);
SELECT id,word FROM temp_explode;
Сегодня я столкнулся с такой же проблемой и разрешил ее, как показано ниже. Обратите внимание, что в моем случае я знаю количество элементов в конкатенированной строке, поэтому я могу восстановить их следующим образом:
set @var1=0;
set @var2=0;
SELECT SUBSTRING_INDEX('value1,value2', ',', 1) into @var1;
SELECT SUBSTRING_INDEX('value1,value2', ',', -1) into @var2;
переменные @ var1 и @ var2 будут иметь значения, похожие на explode ().
Используйте эту функцию. Отлично работает. замените "|" с символом, чтобы взорваться / разбить, а значения 1,2,3 и т. д. основаны на количестве записей в наборе данных: Value_ONE | Value_TWO | Value_THREE.
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 1), '|', -1) AS PSI,
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 2), '|', -1) AS GPM,
SUBSTRING_INDEX(SUBSTRING_INDEX(`tblNAME`.`tblFIELD`, '|', 3), '|', -1) AS LIQUID
Надеюсь, это поможет .
ROUND ( (CHAR_LENGTH(
tblNAME .
tblFIELD ) - CHAR_LENGTH(REPLACE (
tblNAME .
tblFIELD , "|", "") ) ) / CHAR_LENGTH("|"))
Zero = length - это один элемент (без разделителя), One = есть два элемента и т. Д.
– FrancescoMM
28 April 2017 в 08:24
, если explode используется вместе с foreach для создания новой строки, вы можете имитировать взрыв, используя цикл while следующим образом:
CREATE FUNCTION explode_and_loop(sep VARCHAR(),inputstring VARCHAR()) RETURNS VARCHAR()
BEGIN
DECLARE part,returnstring VARCHAR();
DECLARE cnt,partsCnt INT();
SET returnstring = '';
SET partsCnt = ((LENGTH(inputstring ) - LENGTH(REPLACE(inputstring,sep,''))) DIV LENGTH(sep);
SET cnt = 0;
WHILE cnt <= partsCnt DO
SET cnt = cnt + 1;
SET part = SUBSTRING_INDEX(SUBSTRING_INDEX(inputstring ,sep,cnt),sep,-1);
-- DO SOMETHING with the part eg make html:
SET returnstring = CONCAT(returnstring,'<li>',part,'</li>')
END WHILE;
RETURN returnstring;
END
этот пример вернет html-список частей. (требуются переменные legths должны быть добавлены)
use substring_index, в приведенном ниже примере я создал таблицу со столбцом score1 и score2, score1 имеет 3-7, score2 7-3 и т. д., как показано на изображении. Следующий запрос способен разделить с помощью «-» и изменить порядок оценки2 и сравнить с score1
SELECT CONCAT(SUBSTRING_INDEX(score1,'-',1),
SUBSTRING_INDEX(score1,'-',-1)) as my_score1,
CONCAT(SUBSTRING_INDEX(score2,'-',-1),SUBSTRING_INDEX(score2,'-',1)) as my_score2
FROM test HAVING my_score1=my_score2
Прежде всего, вы должны изменить структуру базы данных - оценка в этом случае является некотором составным значением и должна храниться в двух столбцах, например. score_host
, score_guest
.
MySQL не предоставляет эквивалент explode()
, однако в этом случае вы могли бы использовать SUBSTRING()
и LOCATE()
, чтобы отключить оценку хоста и гостя.
SELECT
CONVERT(SUBSTRING(score, 1, LOCATE('-',score) - 2) USING INTEGER) as score_host,
CONVERT(SUBSTRING(score, LOCATE('-',score)+2) USING INTEGER) as score_guest
FROM ...;
CONVERT()
используется для перевода строки "23"
в число 23
.