Я хочу вернуть 10 строк json с mysql с данными из моей базы данных, но я получаю ошибку: SQL Error (1172): Результат состоял из нескольких строк! Да, я знаю, что результат состоит из большего количества строк, их 10, проблема заключается в том, как печатать их все в разных строках?SQL Результат состоял из нескольких строк
CREATE DEFINER=`root`@`localhost` FUNCTION `search_for`(`value` TEXT)
RETURNS text CHARSET latin1
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE sid TEXT;
DECLARE semail TEXT;
DECLARE sname TEXT;
DECLARE slastname TEXT;
DECLARE response TEXT;
SELECT id,email,name,lastname INTO sid,semail,sname,slastname
FROM user WHERE email LIKE CONCAT('%',value,'%')
OR lastname LIKE CONCAT('%',value,'%')
OR name LIKE CONCAT('%',value,'%') LIMIT 10;
IF (semail IS NOT NULL) THEN
SET response = CONCAT('{"response":1,"id":',sid,',"email":"',semail,'","name":"',sname,'","lastname":"',slastname,'"}');
ELSE
SET response = CONCAT('{"response":0}');
END IF;
RETURN response;
END
после я использовать курсор и цикл метод для получения результатов поиска в нескольких строках выглядеть следующим образом:
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE ids TEXT;
DECLARE response TEXT;
DECLARE ids_cursor CURSOR FOR
SELECT id,email,name,lastname -- INTO ids,semail,sname,slastname
FROM user WHERE email LIKE CONCAT('%',value,'%')
OR lastname LIKE CONCAT('%',value,'%')
OR name LIKE CONCAT('%',value,'%');
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 2;
OPEN ids_cursor;
get_ids: LOOP
FETCH ids_cursor INTO ids;
IF finished = 2 THEN
LEAVE get_ids;
END IF;
SET response = CONCAT(ids,";",response);
END LOOP get_ids;
CLOSE ids_cursor;
RETURN response;
END
и я все еще получаю маленькую ошибку (1328): Неверное количество FETCH переменных! Зачем?
Update
отредактирован следующая строка:
SELECT id --,email,name,lastname -- INTO ids,semail,sname,slastname
NULL
получить ответ
Вам нужно использовать курсор и петлю. –
Я уже пробовал один раз, но никакого успеха не получилось. теперь, когда я точно знаю, что это ответ, я постараюсь исправить проблему. –
сделано, я редактирую вопрос –