0

我有 2 个表用户和消息: 包含、、和包含
users、、、,id我想选择name接收 器等于用户的相同 id 的所有行我如何循环它以获取它们?emailpassword
msgsidsenderreceiverlink

我尝试做某事但没关系

$name_query = mysql_query("SELECT fullname,id FROM users WHERE email = '$email'");
$name = mysql_fetch_object($name_query);

$user_id = $name->id;

$result = mysql_query("SELECT receiver FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %s  Name: %s", $row[0], $row[1]);  
}

mysql_free_result($result);

?>
4

4 回答 4

0

尝试这个::

Select 
u.fullname,u.id
from 
`users` u
INNER JOIN msgs m ON (u.id=m.receiver)
WHERE email = '$email'
于 2013-02-03T12:31:51.553 回答
0

您应该只检索您想要的行,而不是所有行(如果您的数据库中有 1.000.000 条消息怎么办?)。

这可以通过使用“JOIN”的一个查询来完成:http: //dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-02-03T12:32:45.277 回答
0

使用join子句

SELECT m.*, u.email, u.name FROM `users` AS u
JOIN `msgs` AS m ON m.receiver = u.id
WHERE u.email = '$email'

这给了你例如

| id | sender | receiver |   link   |      email       |      name       |  
+----+--------+----------+----------+------------------+-----------------+
|  1 |    1   |     2    |   adfd   | receiver's email | receiver's name |

您可以将结果提取到关联数组并使用命名索引,例如:

$row['link']
$row['name']

或普通索引数组(正确的索引可以通过打印整个数组来找到)

print_r($row)

$row[3] // should be link
$row[5] // should be name
于 2013-02-03T12:34:43.507 回答
0

在您的情况下,循环非常昂贵且无用。使用LEFT JOIN(如果任何列为 NULL,JOIN 或 INNER JOIN 将不返回任何内容);

SELECT 
  u.*,
  m.sender, m.receiver, m.link
FROM users u
LEFT JOIN msgs m ON (m.receiver = u.id)
WHERE email = '$email'
于 2013-02-03T12:38:40.497 回答