在mysql中循环访问数据库以获取所有结果并显示它们

时间:2013-02-03 12:29:11

标签: php mysql

我有2个表用户和消息:
users包含idnameemailpassword
msgs包含idsenderreceiverlink 我想选择接收器等于用户相同id的所有行,我怎样才能将它循环以获取所有行?

我尝试做一些但没有事情的事情

$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 个答案:

答案 0 :(得分:0)

试试这个::

Select 
u.fullname,u.id
from 
`users` u
INNER JOIN msgs m ON (u.id=m.receiver)
WHERE email = '$email'

答案 1 :(得分:0)

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

只需使用“JOIN”进行一次查询即可完成此操作:http://dev.mysql.com/doc/refman/5.0/en/join.html

答案 2 :(得分:0)

使用join clausule

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

答案 3 :(得分: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'