group_contact usando left join mysql e separador

SQL

MySQL

09/02/2020

Boa tarde pessoal, alguém consegue me ajudar com essa questão:

https://pt.stackoverflow.com/questions/434904/group-contact-usando-left-join-mysql-e-separador
Saulo Lago

Saulo Lago

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

12/02/2020

o problema está neste campo. terá de ser feita uma abordagem diferente, porque o campo é uma 'lista' de IDs.

teste isto:
SELECT
    prova.id,
    GROUP_CONCAT(respostas.name)
FROM
    prova
LEFT JOIN
    respostas ON FIND_IN_SET(trim(cast(respostas.id as varchar(6))) , trim(prova.respostas_id)) > 0
WHERE
    prova.status = 1 
GROUP BY
    prova.id

GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

09/02/2020

não bastaria somente:
SELECT
    prova.id,
    GROUP_CONCAT(respostas.name)
FROM
    prova
LEFT JOIN
    respostas ON respostas.id = prova.respostas_id
WHERE
    prova.status = 1 
GROUP BY
    prova.id
GOSTEI 0
Saulo Lago

Saulo Lago

09/02/2020

não bastaria somente:
SELECT
    prova.id,
    GROUP_CONCAT(respostas.name)
FROM
    prova
LEFT JOIN
    respostas ON respostas.id = prova.respostas_id
WHERE
    prova.status = 1 
GROUP BY
    prova.id


Dessa forma ele apenas retorna o primeiro valor da tabela, ignorando os outros. Com isso não consigo criar um separador para cada item adicionado.
GOSTEI 0
Kleber Santos

Kleber Santos

09/02/2020

não bastaria somente:
SELECT
    prova.id,
    GROUP_CONCAT(respostas.name)
FROM
    prova
LEFT JOIN
    respostas ON respostas.id = prova.respostas_id
WHERE
    prova.status = 1 
GROUP BY
    prova.id


Dessa forma ele apenas retorna o primeiro valor da tabela, ignorando os outros. Com isso não consigo criar um separador para cada item adicionado.


Eu só vejo uma solução com storage Procedure conforme respondido pelo Emerson Nascimento em 2005 O.o
https://www.devmedia.com.br/forum/loop-no-select/265659

Ou tratar essa string com explode/split na sua aplicação.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

09/02/2020


qual o tipo do campo prova.Respostas_ID ?

GOSTEI 0
Saulo Lago

Saulo Lago

09/02/2020


qual o tipo do campo prova.Respostas_ID ?



Bom dia Emerson,

O campo Respostas_ID é um campo varchar do MySQL. Não sei se existe um outro campo do MySQL para trabalhar melhor com esse tipo de dado

Abraço
GOSTEI 0
Saulo Lago

Saulo Lago

09/02/2020

o problema está neste campo. terá de ser feita uma abordagem diferente, porque o campo é uma 'lista' de IDs.

teste isto:
SELECT
    prova.id,
    GROUP_CONCAT(respostas.name)
FROM
    prova
LEFT JOIN
    respostas ON FIND_IN_SET(trim(cast(respostas.id as varchar(6))) , trim(prova.respostas_id)) > 0
WHERE
    prova.status = 1 
GROUP BY
    prova.id



Obrigado Emerson, isso me ajudou muito até mesmo me mostrando sobre essa função do MySQL FIND_IN_SET que eu desconhecia.

Só uma observação em seu código ali (descobri isso pesquisando aqui) no Cast não funciona quando inserimos varchar, tive que mudar para Char.

Em outros teste também apenas colocando assim:
respostas ON FIND_IN_SET(respostas.id, prova.respostas_id)


Também funciona.
Vlw, ajudou muito!
GOSTEI 0
POSTAR