0

複数のテーブルを使用して最近の投稿(Q)とユーザー名(ハンドル)を取得したいのですが、このコードで取得しようとするとエラーが発生します

テーブル名qa_postsおよびqa_usersであり、qa_postsからのユーザーIDを接続してqa_usersから処理する必要があります

SELECT *
FROM qa_posts, qa_users
WHERE type="Q" AND qa_posts.userid = "qa_users.handle"
ORDER BY created DESC
LIMIT 5

エラーメッセージ

SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY created DESC
LIMIT 5

Error 1052: Column 'created' in order clause is ambiguous

実際のコード

qa_db_connection();
$query_post = qa_db_query_raw('         
    SELECT *
    FROM qa_posts, qa_users
    WHERE type="Q" AND qa_posts.userid = "qa_users.handle"
    ORDER BY created DESC
    LIMIT 5

') or die(mysql_error());

while($row = mysql_fetch_array($query_post)) {
    echo $row['title'];
    echo '<span style="font-size:65%;font-style:italic">'.$row['created'].'</span>';
    echo '<br/>';
}

テーブル構造については、この画像を参照してください テーブルStrucute

4

2 に答える 2

1

エラーは、名前の列が複数あることを示しているため、 :を実行するためにフィールドcreatedの取得元のテーブルを指定する必要があります。createdORDER BY

SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY qa_posts.created DESC
LIMIT 5

また:

SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY qa_users.created DESC
LIMIT 5

#1を編集します。完全なテーブル構造が表示されない場合はqa_users.handle、引用符で囲んでこれを実行する必要があるようです。これらはおそらく削除する必要があります。

SELECT *
FROM qa_posts
INNER JOIN qa_users
   ON qa_posts.userid = qa_users.handle
ORDER BY qa_posts.created DESC
LIMIT 5

間違ったフィールドで参加している#2を編集します。

SELECT *
FROM qa_posts
INNER JOIN qa_users
   ON qa_posts.userid = qa_users.userid
WHERE qa_posts.type="Q" 
ORDER BY qa_posts.created DESC
LIMIT 5
于 2012-09-08T17:57:27.373 に答える
1

両方のテーブルに同じ名前の列がある場合、指定されたエラーが発生します...したがって、次のパターンのように、テーブル名とともに列名を指定する必要があります。

table_name.column_name

したがって、クエリは次のようになります。

SELECT *
FROM qa_posts, qa_users
WHERE qa_posts.userid = "qa_users.handle"
ORDER BY qa_posts.created DESC (or put the ORDER BY qa_users.created DESC if you want to make order by `created` of `qa_users` )
LIMIT 5

値「qa_users.handle」のユーザーIDを本当に必要としない場合は、それらを引用せず、次のようなクエリを使用する必要があります。

    SELECT *
    FROM qa_posts, qa_users
    WHERE qa_posts.userid = qa_users.userid AND qa_posts.type="Q" 
    ORDER BY qa_posts.created DESC 
    LIMIT 5

JOINは次のように使用することをお勧めします。

    SELECT *
    FROM qa_posts INNER JOIN qa_users ON qa_posts.userid = qa_users.userid 
    WHERE qa_posts.type="Q" 
    ORDER BY qa_posts.created DESC 
    LIMIT 5
于 2012-09-08T17:59:50.677 に答える