0
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*'] 

但无论它采取第一个条目是什么。我该如何解决这个问题。这是这样做的方法吗?任何人都可以发布或建议我一个好方法。谢谢

4

2 回答 2

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
于 2013-06-15T19:56:21.727 回答
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 的每一行与 table2 的行组合在一起Pro_ID='$pro_id'(导致上面的示例表有 4 行),然后返回第一行(它始终包含 table1 的第一行的值) .


问题是只有当它们的pro_id值相同时,才没有强制匹配 table1 和 table2 中的行的约束。

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

WHERE1.) 在您的子句中添加一个附加条件:

...
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 连接的更多信息。)

于 2013-06-15T20:19:08.743 回答