Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Atualmente consegui o retorno que eu quero através dessa query, mas acho que dá pra fazer de uma forma melhor, alguém sabe como me ajudar nisso?
SELECT (
SELECT `imagem`
FROM anexos
WHERE idencomendas =16
LIMIT 0 , 1
) AS Anexo1, (
SELECT imagem
FROM anexos
WHERE idencomendas =16
LIMIT 1 , 1
) AS Anexo2, (
SELECT imagem
FROM anexos
WHERE idencomendas =16
LIMIT 2 , 1
) AS Anexo3
Agradeço desde já pela ajuda
pra que complicar ?
SELECT imagem FROM anexos WHERE idencomendas = 16 LIMIT 3
use um loop para percorrer as 3 linhas retornadas.
Bem o que eu quero é o seguinte:
Eu tenho várias tabelas, mas duas em especifico:
encomendas e anexos
a encomendas tem os seguintes campos
encomendas_id int(100) auto_increment
encomendas_idcadastro int(100)
encomendas_idmodelo int(10)
encomendas_data date
encomendas_tamanho int(5)
encomendas_rabetas int(5)
encomendas_material int(5)
encomendas_quilhas int(5)
encomendas_acabamentos int(5)
encomendas_extra int(5)
encomendas_pintura int(5)
encomendas_observacoes text
encomendas_formaspagamento int(2)
encomendas_total float(9,2)
encomendas_status int(1)
e anexos:
anexos_id int(100) auto_increment
idencomendas int(100)
imagem varchar(100)
as outras tabelas eu consigo selecionar juntas numa boa, eu uso a seguinte consulta para retornar todos dados da encomenda:
SELECT * FROM `encomendas` , `tamanho` , `rabetas` , `material` , `quilhas` , `acabamentos` , `extra` , `pintura` , `formadepagamento`
WHERE `encomendas`.`encomendas_tamanho` = `tamanho`.`tamanho_id`
AND encomendas.encomendas_rabetas = rabetas.rabetas_id
AND encomendas.encomendas_material = material.material_id
AND encomendas.encomendas_quilhas = quilhas.quilhas_id
AND encomendas.encomendas_acabamentos = acabamentos.acabamentos_id
AND encomendas.encomendas_extra = extra.extra_id
AND encomendas.encomendas_pintura = pintura.pintura_id
AND encomendas.encomendas_formaspagamento = formadepagamento.formadepagamento_id
Apesar de ser uma consulta grande, me retorna todos os dados que eu preciso, então teria de incluir os anexos nessa consulta, que podem ser 1 ou 2 ou 3. São identificados pelo campo idencomendas que entraria no WHERE relacionado os encomendas_id. Gostaria que cada imagem anexa, fosse retornada como se fosse uma coluna, no caso de ter apenas 1 ou 2 registros com o mesmo idencomendas na tabela anexos, a terceira coluna retornaria null.
Agora Expliquei toda a situação. Pensei em fazer 3 subquerys adicionando o encomendas.encomendas_id como campo para retorno e atribundo a ele uma variavel e repeti-la dentro da subquery, desta forma:
SELECT *, @dt := encomendas.encomendas_id, (SELECT imagem FROM anexos WHERE idencomendas = @dt LIMIT 0 , 1 ) AS Anexo1 FROM ...
E duas subquerys com de forma analoga, mas acho que ficaria um código muito grande, porisso queria saber se existe uma outra forma de fazer isso, Será que alguém pode me ajudar?
Devido a complexidade da tua consulta, talvez valha mais a pena trazer os anexos separadamente, com uma query simples, como sugeri mesmo.
vou mover o tópico para o fórum de MySQL, pois por lá, o pessoal é mais especialista em banco de dados.
visto que a tua dúvida não é sobre php.
Nesse caso teria várias consultas, pois cada linha da tabela teria que ter uma consulta só para os anexos.
Com o passar do tempo e o crescimento do banco de dados, essas consultas a cada linha poderiam fazer o acesso as informações e o tempo de resposta das páginas ficarem demasiadamente lento. Porisso prefiro resolver tudo em uma consulta.
Da forma que eu pensei funciona, mas acredito que tenha uma forma melhor, algum recurso, função ou configuração da tabela que eu não to tendo conhecimento para aplicar.
Agradeço a Ajuda, se alguém souber como me ajudar eu agradeço.
Você tem 1 tabela encomendas ? Cada tabela encomendas você pode adicionar vários anexos para essa encomenda certo ?
Exemplo:
id_4 - encomenda de bolo - encomenda
1 - 4 - foto do bolo_1 - anexo
2 - 4 - foto do bolo_2 - anexo
3 - 4 - foto do bolo_3 - anexo
Seria isso a lógica ?
2 tabelas, encomendas e anexos.
as outras são frutos da normatização. mas se atendo a essas 2 tabelas, queria que junto com as encomendas fosse acrescentado os registros de anexos que tivessem o anexos.idencomendas em encomendas.encomendas_id. Só que não é uma união simples. Quero que na mesma linha retorne todos os registros de anexo que foram validados pela regra acima.
A consulta apresenta o seguinte retorno:
encomendas_id encomendas_status encomendas_idcadastro encomendas_idmodelo encomendas_data encomendas_tamanho encomendas_rabetas encomendas_material encomendas_quilhas encomendas_acabamentos encomendas_extra encomendas_pintura encomendas_observacoes encomendas_formaspagamento encomendas_total tamanho rabetas material quilhas acabamentos extra pintura formadepagamento logar
16 0 5 17 2011-06-19 19 2 1 1 1 1 1 teste 4 1373.13 6'6'' round squash Nacional Series fcs tri-quilha polimento laminação de carbono 1 lado pintado Cartão 3x master
18 0 5 17 2011-06-19 19 1 1 6 1 3 1 status 3 954.87 6'6'' squash Nacional Series future tri quilha polimento longarina de carbono pintado Cartão 2x master
4 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 9 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado 50% dinheiro + 50% c master
5 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 9 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado 50% dinheiro + 50% c master
6 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 9 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado 50% dinheiro + 50% c master
7 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 9 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado 50% dinheiro + 50% c master
8 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
9 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
10 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
11 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
12 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 0.00 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
13 0 5 17 2011-06-19 19 2 1 6 2 2 1 teste 4 1915.93 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
14 0 5 17 2011-06-19 19 2 1 6 2 2 1 testye 3 2011.72 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 2x master
15 0 5 17 2011-06-19 19 2 1 6 2 2 1 testepp 3 1820.13 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 2x master
17 0 5 17 2011-06-19 19 2 1 6 2 2 1 gfgdf 4 1915.93 6'6'' round squash Nacional Series future tri quilha fosca laminação de carbono 2 lados pintado Cartão 3x master
ou assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.montepage.com.br/qrencomendas.gif&key=53fa333c66a410c7f9fb3751cfdf5730208ff5491aa70d037fb333f4bc234427" alt="qrencomendas.gif" />
Não existe nenhuma conta,
o comando da consulta seria:
SELECT @dt := `encomendas`.`encomendas_id`, (SELECT `imagem` FROM `anexos` WHERE `idencomendas` = @dt LIMIT 0 , 1 ) AS
Anexo1, (SELECT `imagem` FROM `anexos` WHERE `idencomendas` = @dt LIMIT 1 , 1 ) AS Anexo2, (SELECT `imagem` FROM `anexos`
WHERE `idencomendas` = @dt LIMIT 2 , 1 ) AS Anexo3,`encomendas`.*, `tamanho`.`nome` as 'tamanho', `rabetas`.`nome` as
'rabetas', `material`.`nome` as 'material', `quilhas`.`nome` as 'quilhas', `acabamentos`.`nome` as 'acabamentos',
extra.nome as 'extra', pintura.nome as 'pintura', formadepagamento.nome as 'formadepagamento',
logar.logar_login as 'logar' FROM encomendas , tamanho , rabetas , material , quilhas , acabamentos
, extra , pintura , formadepagamento , logar WHERE encomendas.encomendas_tamanho =
tamanho.tamanho_id AND encomendas.encomendas_rabetas = rabetas.rabetas_id AND
encomendas.encomendas_material = material.material_id AND encomendas.encomendas_quilhas =
quilhas.quilhas_id AND encomendas.encomendas_acabamentos = acabamentos.acabamentos_id AND
encomendas.encomendas_extra = extra.extra_id AND encomendas.encomendas_pintura = pintura.pintura_id AND
encomendas.encomendas_formaspagamento = formadepagamento.formadepagamento_id AND
encomendas.encomendas_idcadastro = logar.logar_id
Fiz da forma que está acima, acho que tá bem explicado. Tem alguma forma de melhorar o desempenho e simplificar a query?
Ninguém sabe como poderia ajudar?
//sei nao mas acho que vou salvar sua vida em kkkkkkkkkkkkkkkkkkk
faz um subselect com group_concat()
select
(select group_concat(minhas_imagens) as imagens_agrupadas from minha_tabela where tabela.id = minha_tabela.id )
from
tabela
//obs no group concat da para ordenar e trocar o delimitador...
mais instruções leia
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
Abraços
KUROLE
Não entendi o que você quer fazer com essa SQL, qual o resultado desejado ?