Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
esse consulta Em cima esta mostrando todos os campos comodidade como marcado alem desse campo quero mostrar o campo id_detalheProc pode-me ajudar?
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)
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.
Qual campo na tabela #tbl_comodidade tem o mesmo valor da tabela #tbl_deta_pro_como ?
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
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
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
id_comodidade deveria validar também se é o produto recebido, certo?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.
/applications/core/interface/imageproxy/imageproxy.php?img=https://www.dropbox.com/s/j0gp60lwpo9w89l/Screen%2520Shot%25202015-03-14%2520at%252010.56.22.png?dl=0&key=4908f0a0344469a316ce93ff5071d1e4e6f68bd5eecbaadb4e14b8c5c32d13f2" alt="Screen%20Shot%202015-03-14%20at%2010.56." />
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...
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.
Não entendi, pode ser mais específico?