为特定列选择2个表值

时间:2013-06-15 19:51:01

标签: php mysql

table1: Proid   email        password   verify
        12345   john@xx.com  xxxxxxx     xxxx
        45678   lee@xx.com   xxxxxxx     xxxx
        // some more tables here

table2: Proid   fname    lname   gender  dofbirth 
        13456    rey      aj      male    xxxxx
        12345    john     paul    male    xxxxx
        47812    murray   dj      male    xxxxx
        45678    lee      mah     female  xxxxx

注意此表格没有重复Proid

现在这里Proid对于我想要的两个表来说很常见,就像这样获取一个简单的数组

$result = mysql_query("SELECT table1.verify,table1.Email,table2.* FROM table1,table2 WHERE table2.Pro_ID='$pro_id' LIMIT 1"); 
$row = mysql_fetch_array($result, MYSQL_ASSOC);
// and I expect $row variable now has this values
 $row['email'],$row['verify'],$row['fname'],row['lname'],row['table2*'] 

但无论第一次参赛是什么。我怎么解决这个问题。这是这样做的方法吗?任何人都可以发布或建议我这样做的好方法。感谢

2 个答案:

答案 0 :(得分:1)

改变这个:

SELECT table1.verify,table1.Email,table2.* FROM table1,table2 
            WHERE table2.Pro_ID='$pro_id' LIMIT 1 

为:

SELECT table1.verify,table1.Email,table2.* FROM table1 
           left join table2 on table1.Proid=table2.Proid 
           where table2.Proid in not null LIMIT 1

答案 1 :(得分:0)

您的查询会发生什么:

SELECT table1.verify, table1.Email, table2.*
//means: In each row include columns 'verify' and 'email'
//       from table1 and all columns from table2.

FROM table1, table2 
//means: Combine EACH row of table1 with EACH row of table2.

WHERE table2.Pro_ID='$pro_id'
//means: Fetch only rows where the 'pro_id' column
//       of table2 has the specified value.

LIMIT 1
//means: Fetch only the first row.

所以,实际发生的是你将table1的每行行与具有Pro_ID='$pro_id'的table2的行组合在一起(导致上面的示例表为4行)然后返回第1行(始终包含table1第1行的值)。


问题在于,当pro_id值相同时,没有强制匹配table1和table2 行的匹配。

您可以通过多种方式解决此问题。

1。)在WHERE子句中添加其他条件:

...
WHERE table1.Pro_ID = table2.Pro_ID
  AND table2.Pro_ID = '$pro_id'
...

2。)加入“Pro_ID”列上的表格:

...
FROM table1 INNER JOIN table2
  ON table1.Pro_ID = table2.Pro_ID
...

(有关 SQL joins 的更多信息。)