Display foreign keys from a table in the query

Asked

Viewed 905 times

2

I have a table where each projeto may be related to up to 4 produtos.

  • Main Table (foreign keys):

    • IDPRODUTO
    • IDPRODUTO2
    • IDPRODUTO3
    • IDPRODUTO4
  • Table produtos

    • ID
    • NOME

To perform the display, I created a dynamic table. When I do the query, I use JOIN to bring the product table.

The problem is that I can’t display the name of all four products, only the product name of the first ID that appears. How do I display the product name related to other Ids ?

Exibição da tabela:

Mysql query:

SELECT * 
FROM principal 
JOIN produto on principal.IDPRODUTO and principal.IDPRODUTO2 and principal.IDPRODUTO3 and principal.IDPRODUTO4 = produto.PROD_ID 
JOIN responsavel on principal.IDRESPONSAVEL = responsavel.RESP_ID 
JOIN  reserva on principal.IDRESERVA = reserva.RES_ID 
WHERE principal.PROJETO LIKE '%$q%'

PHP for table display:

 <tr>
    <td height="27"><?php echo $row_BUSCA['ID']; ?></td>
    <td><?php echo $row_BUSCA['PROJETO']; ?></td>
    <td><?php echo $row_BUSCA['DATA']; ?></td>
    <td><?php echo $row_BUSCA['IDPRODUTO']; ?></td>
    <td><?php echo $row_BUSCA['IDPRODUTO2']; ?></td>
    <td><?php echo $row_BUSCA['IDPRODUTO3']; ?></td>
    <td><?php echo $row_BUSCA['IDPRODUTO4']; ?></td>
    <td><?php echo $row_BUSCA['IDRESPONSAVEL']; ?></td>
    <td><?php echo $row_BUSCA['DESIGNADOR']; ?></td>
    <td><?php echo $row_BUSCA['TAGS']; ?></td>
    <td><?php echo $row_BUSCA['EQUIPAMENTO']; ?></td>
    <td><?php echo $row_BUSCA['IDRESERVA']; ?></td>
    <td><?php echo $row_BUSCA['ARQUIVO']; ?></td>
    <td><?php echo $row_BUSCA['PROD_ID']; ?></td>
    <td><?php echo $row_BUSCA['PROD_NOME']; ?></td>
    <td><?php echo $row_BUSCA['PROD_NOME']; ?></td>
    <td><?php echo $row_BUSCA['PROD_NOME']; ?></td>
    <td><?php echo $row_BUSCA['PROD_NOME']; ?></td>
    <td><?php echo $row_BUSCA['RESP_ID']; ?></td>
    <td><?php echo $row_BUSCA['RESP_NOME']; ?></td>
    <td><?php echo $row_BUSCA['RESPO_TEL']; ?></td>
    <td><?php echo $row_BUSCA['RES_NOME']; ?></td>
  </tr>

NOTE: It is very rudimentary.. later I will work on the details.

Grateful for any help.

Luciano.

  • @dherik is right. Can you show the definition of the tables? And easier to help when we see the query do by the table

1 answer

1

You need to do a JOIN for each FK product in the project table to get the product name or a subquery. This can be done in other ways, but I will present these 2, imagining that the column containing the product name in the table produto be called nome even.

Join:

SELECT princ.*, p1.nome, p2.nome, p3.nome, p4.nome FROM principal princ
JOIN produto p on princ.IDPRODUTO and princ.IDPRODUTO2 and princ.IDPRODUTO3 and princ.IDPRODUTO4 = p.PROD_ID 
JOIN produto p1 ON principal.IDPRODUTO = p1.IDPRODUTO
JOIN produto p2 ON principal.IDPRODUTO = p2.IDPRODUTO2
JOIN produto p3 ON principal.IDPRODUTO = p2.IDPRODUTO3
JOIN produto p4 ON principal.IDPRODUTO = p2.IDPRODUTO4
JOIN responsavel resp on princ.IDRESPONSAVEL = resp.RESP_ID 
JOIN reserva res on princ.IDRESERVA = res.RES_ID WHERE princ.PROJETO LIKE '%$q%'

With Subquery:

SELECT princ.*, 
(select nome FROM produto where produto.id = princ.IDPRODUTO), 
(select nome FROM produto where produto.id = princ.IDPRODUTO2),
(select nome FROM produto where produto.id = princ.IDPRODUTO3),
(select nome FROM produto where produto.id = princ.IDPRODUTO4)
FROM principal princ
JOIN produto on princ.IDPRODUTO and princ.IDPRODUTO2 and princ.IDPRODUTO3 and princ.IDPRODUTO4 = produto.PROD_ID 
JOIN responsavel on princ.IDRESPONSAVEL = responsavel.RESP_ID 
JOIN reserva on princ.IDRESERVA = reserva.RES_ID WHERE princ.PROJETO LIKE '%$q%'

Stay tuned to your bank mapping as well. The fact that you have 4 foreign keys (Foreign Keys) from product to in a table can indicate that perhaps you need a table N to N between main and product. Thus, if the need arises for a IDPRODUTO5 or treat records that do not have all the IDPRODUTO, the distribution of information in the tables will be more coherent and flexible.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.