从PHP中的外键引用中获取列值(名称)

时间:2014-07-24 12:55:28

标签: php mysql sql

我有两个数据库fruitfruit-prices(为了争辩)。

fruit中有两列id | name

水果表

 id | name 
 1  | Apple 
 2  | Banana

fruit_prices中有三列id | fruit_id | price,其中fruit_idFOREIGN KEY引用。

 id | fruit_id | price
 1  |    1     | £2.00
 2  |    2     | £3.00

现在我有一个PHP函数,它将打印出一个表行和带有数据库信息的单元格,但是目前如果我打印两个水果,我的表​​就像这样。

 Name | Price 
 1    | £2.00
 2    | £3.00 

PHP代码:

$query = mysqli_query($conn, "SELECT * FROM fruits ");

while($row = mysqli_fetch_assoc($query)) {

    $name = $row['fruit_id']; //for comma separation
    $price = $row['price'];
    echo "<tr>";

        echo "<td>"     .$name.     "</td>" . 
             "<td>"     .$price.    "</td>";

    echo "</tr>";
}

是否有一种优雅的方式可以检索水果的名称(即1 = Apple,2 =香蕉)。而不是使用每个水果的唯一ID。

那么我的表格看起来就像这样

Name  | Price
Apple | £2.00

...

我希望这有道理吗?我是RD概念的新手。这是一个非常简单的例子,并不反映我的整个项目,所以我只是想知道这是否可以实现?

8 个答案:

答案 0 :(得分:3)

这可以通过连接两个表来完成。用下面的一个更改你的sql查询。我认为它将解决你的问题。

&#34; SELECT fruitnamefruit_pricesprice FROM fruitfruit_prices WHERE fruit_pricesfruit_id = fruitid&#34 ;;

答案 1 :(得分:1)

您可能希望使用连接并指定要选择的列。

SELECT f.name, fp.price FROM fruit as f
JOIN fruit-prices as fp ON f.id=fp.fruit_id;

答案 2 :(得分:0)

使用JOIN

可以实现
SELECT * FROM fruits a JOIN fruits-prices b ON b.fruit_id = a.id

对于更友好的列名,您可以添加列别名并进一步使用它们。

答案 3 :(得分:0)

你说他们在两个数据库中,但我认为它可能只是两个表。如果是这样的话:

select * from fruit f
left outer join fruit-prices fp
on f.id = fp.fruit_id

左外连接确保如果水果没有价格,它将被返回将作为价格为空。如果您不希望用内连接替换它。

答案 4 :(得分:0)

使用JOIN可以满足您的需求。

"SELECT `p`.`price`, `f`.`name` FROM `fruit_prices` `p`
JOIN `fruits` `f` ON `f`.`id` = `p`.`fruit_id`"

要小心 - 在这里使用SELECT *会导致错误,因为两个表都有id字段,并且查询会中断。

答案 5 :(得分:0)

您需要在表之间进行连接,

SELECT f.name, fp.price
  FROM fruit f
 INNER JOIN fruit_price fp ON f.id = fp.fruit_id

答案 6 :(得分:0)

嗯,你需要看看SQL Joins

query = mysqli_query($conn, "SELECT FRUIT.name,FRUIT_PRICES.price FROM fruits INNER JOIN FRUIT_PRICES ON FRUIT.id = FRUIT_PRICES.fruit.id");

while($row = mysqli_fetch_assoc($query)) {

$name = $row['name']; //for comma separation
$price = $row['price'];
echo "<tr>";

    echo "<td>"     .$name.     "</td>" . 
         "<td>"     .$price.    "</td>";

echo "</tr>";
}

我写的意思是:“在FRUIT和FRUIT_PRICES中选择FRUIT.Name,FRUIT_PRICES.price,考虑到FRUITS.id与FRUIT_PRICES.id_fruit有关”

答案 7 :(得分:-1)

建议:您可以拥有一个表格,其中包含3列id,fruit_name,price。

表格结构:

SELECT fruits.id, name, price 
FROM fruits, fruit-prices 
WHERE fruit_id=fruits.id;