Display foreign keys from a table in the query

2

I have a table where every projeto can 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 PivotTable. When I query, I use JOIN to bring the table of products.

The problem is that I can not display the name of the 4 products, just the product name of the 1st ID that appears. How do I display the product name related to the other ID's?

MySQLQuery:

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 to display the table:

 <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's very rudimentary .. I'll work on the details later.

Thanks for any help.

Luciano.

    
asked by anonymous 15.04.2015 / 00:36

1 answer

1

You need to do a JOIN for each product FK in the project table to get the product name or a subquery. This can be done in other ways, but I'll introduce these 2, figuring that the column containing the product name in the produto table is called nome itself.

With 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 the mapping of your bank as well. The fact that you have 4 Foreign Keys keys in a table may indicate that you may need a N to N table between main and product. So if the need arises for a IDPRODUTO5 or treats records that do not have all IDPRODUTO , the distribution of information in the tables will be more coherent and flexible.

    
15.04.2015 / 03:42