Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

biza

problema de query mysql

Recommended Posts

Viva pessoal,

Estou com problemas na seguinte query em mysql:

"SELECT id_comodidade, comodidade, IF(id_comodidade IN (SELECT comodidade_id FROM tbl_deta_pro_como WHERE produto_id = {$_GET['id']}),'checked','') AS marcada FROM tbl_comodidade WHERE detalhe_como_id='$row1[0]' ORDER BY comodidade ASC"

alem do campo "comodidade" eu gostaria de ter acesso ao campo "id_detalheProc", como poderei fazer isso?

as minhas tabelas são:

 

#tbl_comodidade

id_comodidade

comodidade

detalhe_como_id

 

#tbl_deta_pro_como

id_detalheProc

produto_id

comodidade_id

data_last_inser

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse consulta Em cima esta mostrando todos os campos comodidade como marcado alem desse campo quero mostrar o campo id_detalheProc pode-me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja mais sobre JOIN, este link permite a tradução, mas não é bom traduzir, por exemplo, JOIN passa a ser JUNTA, e o comando JUNTA não funciona no MySQL.

SELECT
  c.id_comodidade,
  c.comodidade,
  c.detalhe_como_id,
  d.id_detalheProc,
  d.produto_id,
  d.comodidade_id,
  d.data_last_inser,
  IF( produto_id = {$_GET['id']}, 'checked', NULL ) AS marcada # ALIAS marcada (apelido)
FROM tbl_comodidade AS c # ALIAS c (apelido)
LEFT JOIN tbl_deta_pro_como AS d # ALIAS d (apelido)
  ON d.comodidade_id = c.comodidade_id
WHERE detalhe_como_id='$row1[0]'
ORDER BY comodidade ASC

Com o JOIN você tem acesso a todos os campos da outra tabela, desde que tenha uma referência válida.

 

OBS: O ideal é que os campos sejam do mesmo TIPO, ou seja, INT = INT, SMALLINT UNSIGNED = SMALLINT UNSIGNED e não INT = SMALLINT (pode funcionar, mas em algum momento vai dar erro)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok lokaodomau a resoluçao que voce me apresentou esta correcta no entanto voce Veja que se preencher dados na tablela a resoluçao não Fica identica a minha, a minha query esta fazendo o certo Neal eu so queria adicionar a coluna id_detalheProc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK, faz um teste com a função BENCHMARK(count, expr) para ver o desempenho:

SELECT BENCHMARK(1000000, 'SELECT * FROM exemplo')
/*
Count: quantas vezes executar a consulta/expressão (1 milhão de vezes no exemplo)
Expr: expressão, o que vai ser executado {count} vezes
Obs: Substitua a SQL "SELECT * FROM exemplo" pela SQL que deseja testar
*/

O resultado será o tempo que demorou para executar todas as {count} vezes a expressão

Compartilhar este post


Link para o post
Compartilhar em outros sites

Id_comodidade=comodidade_id respectivamente.

 

Locaodomau compreendo que esta tentAndo fazer mas a minha consulta sera sempre pequena de campos reduzidos no Maximo 30 itens sempre' dai nao estar muito preocupado com performance mas combos doi typos de id's o I'd principal da tabela #tbl_deta_pro_como (id_detalheProc) Que é o que me vai permitir apagar, editar e o valor comodidade_id que me vai permiir saber da consulta qual a checkbox que se encontra checkada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe pela falta de comprometimento, não me esforcei o suficiente.

 

Veja se agora resolve:

SELECT
  c.id_comodidade,
  c.comodidade,
  c.detalhe_como_id,
  d.id_detalheProc,
  d.produto_id,
  d.comodidade_id,
  d.data_last_inser,
  IF( COUNT(d.id_detalheProc) > 0, 'checked', NULL ) AS marcada # ALIAS marcada (apelido)
FROM tbl_comodidade AS c # ALIAS c (apelido)
LEFT JOIN tbl_deta_pro_como AS d # ALIAS d (apelido)
  ON d.comodidade_id = c.comodidade_id
  AND d.produto_id = {$_GET['id']}
WHERE detalhe_como_id='$row1[0]'
GROUP BY
  c.id_comodidade,
  d.id_detalheProc
# GROUP BY para que não repita a comodidade, exceto quando houver mais de 1 id_detalheProc
ORDER BY comodidade ASC 

Além de validar o `id_comodidade` deveria validar também se é o produto recebido, certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lokaodomau,

Obrigado pela sua ajuda, meu amigo não ouve falta de comprometimento nenhum, pois você não se comprometeu comigo, agradeço-lhe muito a sua ajuda contudo não estamos a conseguir mostrar o id_detalheProc, a ideia era ter duas colunas com os respectivos id's (comodidade_id|id_detalheProc).

Em baixo segue a imagem de como esta a ser visualizado.

Screen%20Shot%202015-03-14%20at%2010.56.

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT * FROM comodidade.como, data_pro_como.datacomo WHERE como.comodidade_id='1' AND datacomo.comodidade_id=como.id_comodidade GROUP BY datacomo.comodidade_id
... Assim você interage de uma forma mais simples, creio eu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo WictorP,

A ideia que eu tenho nessa consulta é como eu menciono acima, consultar o "id_comodidade", trazendo também o "id_detalheProc" (este último necessito mesmo dele porque preciso de saber na tabela relacional qual o id da linha incrementada), no primeiro post que eu fiz a consulta esta trabalhando bem e é na realidade o que preciso, mas gostava de adicionar a ela o "id_detalheProc" coisa que não estou conseguindo fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.