Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Associação avançada do MySQL. Acelerando a consulta


Existe uma maneira, mas fica mais caro quanto mais você adiciona campos. A mesma coisa ocorre com muitos CMS que optam por armazenar dados adicionais do usuário nesse formulário.

Você pode obter um SQL de pesquisa funcional usando isto:
SELECT
    users.*,
    firstname.data AS firstname,
    lastname.data AS lastname,
    eyecolor.data AS eyecolor,

FROM
    users
    LEFT JOIN completed_form_fields AS firstname ON firstname.userid = users.id AND firstname.fieldkey = "firstname"
    LEFT JOIN completed_form_fields AS lastname ON lastname.userid = users.id AND lastname.fieldkey = "lastname"
    LEFT JOIN completed_form_fields AS eyecolor ON eyecolor.userid = users.id AND eyecolor.fieldkey = "eyecolor"

WHERE
    firstname.data LIKE '%searchdata%'
    OR lastname.data LIKE '%searchdata%'
    OR eyecolor.data LIKE '%searchdata%'

Este método fica muito grande e caro para o servidor MySQL quanto mais você adiciona tabelas. Portanto, eu recomendaria não ir mais do que 10-15 junções assim e, novamente, eu o perfilaria para ter certeza.