0

当我有连接到其他表(cpu、ram、hdd ..)的主表(PC)时,我找不到从其他 mysql 表获取信息的好解决方案。在 PC 表中还有其他组件 ID(cpu、ram、hdd..)。

有我正在使用的代码:

<?php
$query="SELECT * FROM pc ORDER by id";
mysql_query("SET NAMES 'UTF8'");
$result = mysql_query ($query);
$i=1;
echo '<table border = "1">';
echo '<tr><td><b>Nr.</b></td><td><b>CPU:</b></td><td><b>RAM</b></td><td><b>HDD</b></td><td><b>MB</b></td><td><b>GPU</b></td><td><b>Monitor</b></td></tr>';
while($nt=mysql_fetch_array($result)){
$proc = $nt['proc_id'];
$ram = $nt['ram_id'];
$hdd = $nt['hdd_id'];
$mb = $nt['mot_id'];
$gpu = $nt['gpu_id'];
$mon = $nt['monit_id'];

echo '<tr><td><b>'.$i++.'.</b></td><td>'.$proc.'</td><td>'.$ram.'</td><td>'.$hdd.'</td><td>'.$mb.'</td><td>'.$gpu.'</td><td>'.$mon.'</td></tr>';

}
echo '</table>';
?>
_______________________________
|Nr.  CPU  RAM  GPU HDD MONITOR |
| 1    1     2    1   2     2   |
---------------------------------

我正在获取零件 ID 号列表,但我需要打印这些组件的真实名称,这些组件位于其他表中,而不是 ID 中。所以我的问题是如何使用 PC 表中的 ID 来获取包含该 ID 的项目名称。例如:

________________________________________________________
|Nr.  CPU        RAM      GPU        HDD     MONITOR    |
| 1  Intel    2gb adata    GTX 460   WD 1tb     LCD..   |
---------------------------------------------------------

希望你能理解我的问题,谢谢。

4

2 回答 2

0

改变:

SELECT * 
FROM pc 
ORDER by id

类似于

SELECT * 
FROM PC 
LEFT JOIN RAM on PC.Ram_ID = Ram.ID
LEFT JOIN GPU on PC.GPUID = GPU.ID
...
ORDER BY PC.ID

为了更好地理解连接,请参阅http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

于 2012-06-13T16:59:01.370 回答
0

看不到你的表结构,所以这里有一些伪代码。在您的 SQL 查询中,您需要连接到其他表。另外,我不知道您的任何列中是否有任何空值,因此您可能需要这样做LEFT JOINS而不是INNER. JOINS 根据这些表中某些列之间的关系联合来自两个或多个表的数据。由于您的 RealNames 位于除 pc 之外的其他表中,因此您必须将它们带入查询以获取 RealNames。 INNER JOIN将带回两个表中匹配的任何内容。 LEFT JOIN将为您提供左表中的所有行,即使右表中没有匹配项 - 因此,例如,如果您有一个空监视器,您将需要 aLEFT或该行根本不会返回。研究加入!

SELECT pc.Id,PC.RealName,cpu.cpuId,cpu.RealName, ram.ramId ,ram.RealName,hdd.hddId          ,hdd.RealName,...
FROM pc  
INNER JOIN cpu ON cpu.cpuId = pc.cpu
INNER JOIN ram ON ram.ramId = pc.ram 
INNER JOIN hdd ON hdd.hddId = pc.hdd 
...
ORDER by pc.id
于 2012-06-13T17:02:49.133 回答