0

これは、あるテーブルからモデル情報を取得し、別のテーブルから 1 つの画像を取得するクエリです。ORDER BY が DESC を並べ替える場所を取得するには、このクエリにどのような変更を加える必要がありますか? 写真のテーブルには、「並べ替え」という名前のフィールドがあります。各行のフィールドのデフォルト値は 0 です。ただし、1 つのランダムな行の値は 1 です。その特定の行を取得したいと考えています。ただし、ソート値が 1 の行がない場合でも、1 つの行をフェッチする必要があるため、WHERE sort=1 は使用したくありません。

    $sql="SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
          FROM ".$pre."models tc
          INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
          WHERE activated=1 AND sex=$sex AND city=$city AND published=1
          GROUP BY tc.id ORDER BY firstname ASC";

前もって感謝します!


以下を使用して解決:

    SELECT tc.id,tc.alias,tc.firstname, 
    (SELECT imagename FROM  ".$pre."model_images WHERE userid= tc.id 
    ORDER BY sort DESC LIMIT 1) AS imagename
    FROM ".$pre."models tc
    WHERE tc.activated=1 AND tc.sex=1 AND tc.city=2 AND tc.published=1
    ORDER BY tc.firstname ASC
4

1 に答える 1

0

それを WHERE 句にも配置する必要があります。ただし、列名の使用方法には注意が必要です。それらがどのテーブルに属しているかを伝えたほうがよいでしょう。

したがって、この:

WHERE activated=1 AND sex=$sex AND city=$city AND published=1

次のようにする必要があります。

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1

次に、「並べ替え」列を追加するだけです。

WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1

結果が返されない場合は、必要な条件を満たすレコードがあることを確認してください。クエリに問題はないからです。クエリを画面などに出力して、すべての変数に値があるかどうかを確認してください。

編集:

GROUP BY を失う必要があります。

SELECT tc.id,tc.alias,tc.firstname,tci.imagename 
FROM ".$pre."models tc
INNER JOIN ".$pre."model_images tci ON tc.id=tci.userid 
WHERE tc.activated=1 AND tc.sex=$sex AND tc.city=$city AND tc.published=1 AND tci.sort=1
于 2012-05-15T13:55:08.523 に答える