2016-08-10 12 views
0

以下のクエリがあり、正しいデータを取得しますが、結合の結果を制限して写真テーブルの最初の行のみが含まれるようにする必要があります。ここで私が持っているものです。2番目のテーブルの結合結果を制限する

SELECT `listings`.*, `photos`.* 
FROM `listings` JOIN `photos` 
ON `photos`.`listing_id` = `listings`.`id` 
WHERE `listings`.`date_expires` >= '2016-08-10' AND `listings`.`visible` = '1' AND `listings`.`spotlightListing` >= '2016-08-10' 

どのように私はので、私は写真だけテーブルから最初の行を取得する上記を制限するのですか?ありがとう!

+0

最初に "最初の行"が意味するものを定義する必要があります。それから[これらの](http://stackoverflow.com/search?q=%5Bmysql%5Deach+group)はおそらく関連性があります。 – Uueerdo

+0

「最初の行」の意味は、テーブルが結合されたときに最終結果が一致する「リスト」の結果が返され、それぞれが「写真」テーブルの最初の結果を持つことです。言い換えれば、各リスティングに10枚の写真があり、5枚のリスティングがWHEREと一致すると、5つの返された行で終了するだけです(それぞれ1枚の写真がその一部になります)。 – falc2

+0

最終的に結合される行には固有の順序はありません。あなたは、リストにマッチする写真から(効果的に)ランダムな選択をしたいと言っていますか、リストに登録された最初の写真が最初に参加することを期待していますか? – Uueerdo

答えて

1
SELECT `listings`.*, `photos`.* 
FROM `listings` 
JOIN `photos` ON `photos`.`listing_id` = `listings`.`id` 
WHERE `listings`.`date_expires` >= '2016-08-10' AND `listings`.`visible` = '1' 
AND `listings`.`spotlightListing` >= '2016-08-10' 
limit 1 

私はあなたがリストレコードの最初の写真について話していると確信しています。

+1

注文無しの制限はかなり無意味な概念です – Strawberry

+0

写真を1枚しか取っていないのであれば、私は注文することができますが、LEFTを追加する必要があるかもしれないと思いますので空の場合は結果セットをスキップしてください。 –

+0

私はそれを試みましたが、前と同じ問題に遭遇しました - 私は1つの合計結果を取得します。一致する 'listing'テーブルの結果がすべて返され、結果のそれぞれに結合された 'photos'テーブルの最初の結果のみが返される結果を得ようとしています。 – falc2

関連する問題