我有2个表用户和消息:
users
包含id
,name
,email
,password
msgs
包含id
,sender
,receiver
,link
我想选择接收器等于用户相同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);
?>
答案 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'