0

これが機能しない理由がわからないので、これについて助けが必要です。

テーブル内のすべての項目を選択する mysql クエリがありますptb_reviewsptb_profiles

ptb_reviews.from_user_idと等しいように設定したので、inと等しいinptb_profiles.user_id をエコーアウトしたいと考えています。display_nameuser_idptb_profilesfrom_user_idptb_reviews

ただし、 は表示されません。それが機能する唯一の方法は、名前ではなくユーザー番号を表示display_nameする をエコーアウトすることです。from_user_id

ptb_reviewsのテーブルは次のようになります。

id  |  from_user_id  | to_user_id  | content |
1           2               5         hello
2           5               6         hi
3           -1              6         hello 

私の「ptb_profiles」テーブルは次のようになります。

id  |  user_id  |  display_name  |
1         2            jack
2         5            lisa

これが私のmysqlクエリです:

function get_reviews() {
            global $connection;
            global $profile_id;
            $query = "SELECT *
                        FROM ptb_reviews, ptb_profiles
                        WHERE ptb_reviews.to_user_id = \"$profile_id\"
                        AND ptb_reviews.deleted ='0'
                        AND ptb_reviews.approved = '1'
                        AND ptb_reviews.from_user_id = '-1'
                        OR ptb_reviews.from_user_id = ptb_profiles.user_id
                        GROUP BY ptb_reviews.content
                        ORDER BY ptb_reviews.date_added DESC
                        LIMIT 5";
            $reviews_set = mysql_query($query, $connection);
            confirm_query($query, $connection);
            return $reviews_set;
        }

php:

  <?php $reviews_set = get_reviews();
    if(mysql_num_rows($reviews_set) > 0) {
    while ($reviews = mysql_fetch_array($reviews_set)) { ?>

<?php echo "{$reviews['display_name']}"; ?>

どこが悪いのか分からないので誰か教えてください。

ありがとう

4

1 に答える 1

0

まず、「暗黙の結合」 ( )を使用しないでください。select * from table1, table2 where table1.aField = table2.aField明示的な結合を使用します: select * from table1 inner join table2 on table1.aField = table2.aField.

必要なものを確実に手に入れるための簡単な手順をいくつか提案します。PHP プロジェクトに実装する前に、MySQL コンソール (または Workbench または別のインターフェース) で次のすべてを試してください。

to_user_id適切なフィルターを使用して、単一のテーブル内のすべての行を返すのは簡単です。

select 
    *
from
    ptb_reviews as r
    inner join ptb_profiles as p on r.from_user_id = p.userId
where
    r.deleted = '0'
    r.approved = '1'
order by
    r.date_added desc
limit 5

これが機能する場合は、where必要な条件の追加を開始します。それらを 1 つずつ試して、必要なものが得られたら、それを PHP プロジェクトに入れます。

于 2013-05-01T19:25:26.933 に答える