0

usersと msgsの2つの テーブルが あり
usersます。idnameemailpassword
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 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(JOINまたはINNER JOINは、いずれかの列がNULLの場合は何も返しません)。

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 に答える
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」を使用した 1 つのクエリだけで実行できます: http://dev.mysql.com/doc/refman/5.0/en/join.html

于 2013-02-03T12:32:45.277 に答える