1

私はうまく動作するこのクエリを持っています:

SELECT p.design_id, p.product_id, t.account_id, p.name, p.width, p.height, 
 p.price, t.email 
 FROM designs AS p
 INNER JOIN ( SELECT user_id, email, account_id FROM users ) AS t
 USING(user_id) ORDER BY p.design_id LIMIT 0, 300 );

今、私は結果をトリミングしようとしています:

SELECT p.design_id, p.product_id, t.account_id, p.name, p.width, 
 p.height, p.price, t.email 
 FROM designs AS p
 INNER JOIN ( SELECT user_id, email, account_id FROM users 
 WHERE account_id = 0) AS t
 USING(user_id) ORDER BY p.design_id LIMIT 0, 3 );

しかし、2 番目のクエリ結果は最初の結果とまったく同じです。

誰かがこれに光を当てることができますか?

//アップデート

不必要な混乱を防ぐためにphp vaiablesを削除しました:)

4

3 に答える 3

2

これを試してみてください

"SELECT   p.design_id, p.product_id, t.account_id, 
          p.name, p.width, p.height, p.price, t.email 
 FROM     designs AS p
          INNER JOIN  users AS t
              ON p.user_id = t.user_ID AND
                 t.account_id = $ind
 ORDER BY p.design_id LIMIT " . $from . ", " . $howMany
于 2012-11-02T13:16:45.377 に答える
2

デザインから列user_idを選択していません。JOINがまったく機能していません。マニュアルから:

USING(column_list)句は、両方のテーブルに存在する必要がある列のリストを指定します。

または、すべてのユーザーがaccount_id = 0(または少なくともデザインを持っているすべてのユーザー)を持っています。

どちらでもない場合は、ネストされた選択テーブル「t」の前にある「AS」という単語を削除してみてください。

USINGなしで試すこともできます。「USING(user_id)」の代わりに「ONt.user_id=p.user_id」を使用してください。

于 2012-11-02T13:42:49.373 に答える
2

以下のように where 条件でもプレースホルダーを使用してみませんか、それともタイプミスでしたか。

"SELECT p.design_id, p.product_id, t.account_id, p.name, p.width, p.height, p.price, t.email 
 FROM designs AS p
 INNER JOIN ( SELECT user_id, email, account_id FROM users WHERE account_id = **".$ind."**) AS t
 USING(user_id) ORDER BY p.design_id LIMIT ".$from.", ".$howMany );
于 2012-11-02T13:11:04.070 に答える