Busca + Tabelas de Relacionamento
SELECT transportes.id
FROM transportes
#BAIRROS JOIN
LEFT JOIN xbairros ON xbairros.transporte_id = transportes.id AND xbairros.bairro_id IN (SELECT id FROM bairros WHERE nome LIKE '%minas%')
#CARACTERISTICAS JOIN
LEFT JOIN xcaracteristicas ON xcaracteristicas.transporte_id = transportes.id AND xcaracteristicas.caracteristica_id IN (SELECT id FROM caracteristicas WHERE nome LIKE '%minas%')
#CIDADES JOIN
LEFT JOIN xcidades_estados ON xcidades_estados.transporte_id = transportes.id AND (xcidades_estados.cidade_id IN (SELECT id FROM cidades WHERE cidade LIKE '%minas%') OR xcidades_estados.estado_id IN (SELECT id FROM estados WHERE estado LIKE '%minas%'))
#TURNOS JOIN
LEFT JOIN `xturnos` ON `xturnos`.`transporte_id` = `transportes`.`id` AND `xturnos`.`turno_id` IN (SELECT `id` FROM `turnos` WHERE `nome` LIKE '%minas%')
#SELECT RESULT
WHERE `xturnos`.`transporte_id` = `transportes`.`id` OR `xcaracteristicas`.`transporte_id` = `transportes`.`id` OR `xbairros`.`transporte_id` = `transportes`.`id` OR `transportes`.`id` = `xcidades_estados`.`transporte_id`Atualmente é este o código que eu tenho, um "EXPLAIN" tá mostrando bons resultados:
id select_type table type possible_keys key key_len ref rows extra
1 PRIMARY transportes index PRIMARY PRIMARY 4 NULL 5 Using index
1 PRIMARY xbairros ref PRIMARY PRIMARY 4 mfcs0043_database.transportes.id 1 Using index
1 PRIMARY xcaracteristicas ref PRIMARY PRIMARY 4 mfcs0043_database.transportes.id 1 Using index
1 PRIMARY xcidades_estados ref PRIMARY PRIMARY 4 mfcs0043_database.transportes.id 1 Using index
1 PRIMARY xturnos ref PRIMARY PRIMARY 4 mfcs0043_database.transportes.id 1 Using where; Using index
6 DEPENDENT SUBQUERY turnos unique_subquery PRIMARY PRIMARY 1 func 1 Using where
5 DEPENDENT SUBQUERY estados unique_subquery PRIMARY PRIMARY 1 func 1 Using where
4 DEPENDENT SUBQUERY cidades unique_subquery PRIMARY PRIMARY 4 func 1 Using where
3 DEPENDENT SUBQUERY caracteristicas unique_subquery PRIMARY PRIMARY 1 func 1 Using where
2 DEPENDENT SUBQUERY bairros unique_subquery PRIMARY PRIMARY 4 func 1 Using where
Percebi que seria impossível terminar o meu sistema de busca se não utilizasse um relacionamento de tabelas 'muitos-para-muitos'. Como posso fazer pra testar uma situação no mundo real? Minha tabela de desenvolvimento possui 5 rows (na tabela transportes), 5000+ na tabela cidades, 27 na tabela estados, assim por diante. Agora, vocês acham que, com essa bagunça toda, pode dar algum problema? Porque não tem como eu fazer a busca nas tabelas de relacionamento, se eu não fizer um subquery da forma que eu estou fazendo ali (usando o IN). Ou tem outra forma mais adequada pra fazer isso? Eu estava usando uma forma não normalizada antes de mudar, tava uma bagunça, todas as informações juntas, numa tabela só. Agora tá desse jeito aí. Se precisar colocar o "CREATE TABLE" das tabelas, só me avisarem!
Valeu
Discussão (3)
Carregando comentários...