2010-12-31 9 views
0

私は2つのテーブルを持っています。MySQLでサブクエリを使用する方法

ユーザー

CREATE TABLE IF NOT EXISTS `user` (
    `user_id` int(20) NOT NULL AUTO_INCREMENT, 
    `ud_id` varchar(50) NOT NULL, 
    `name` text NOT NULL, 
    `password` text NOT NULL, 
    `email` varchar(200) NOT NULL, 
    `image` varchar(150) NOT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB 

mycatch

CREATE TABLE IF NOT EXISTS `mycatch` (
    `catch_id` int(11) NOT NULL AUTO_INCREMENT, 
    `catch_name` text NOT NULL, 
    `catch_details` text NOT NULL, 
    `longitude` float(10,6) NOT NULL, 
    `latitude` float(10,6) NOT NULL, 
    `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    `image` varchar(150) NOT NULL, 
    `user_id` int(20) NOT NULL, 
    PRIMARY KEY (`catch_id`), 
    KEY `user_id` (`user_id`) 
) ENGINE=InnoDB; 
ALTER TABLE `mycatch` 
    ADD CONSTRAINT `mycatch_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE CASCADE ON UPDATE CASCADE; 

私の目標は次のとおりです。私はud_id(から与えに対してmycatchから緯度と経度を取得したいですユーザ)およびcatch_idcatch_id所与>catch_idをud_id所与=をud_id(mycatchから)。

私は、クエリを使用しますが

SELECT ud_id=$ud_id FROM user 
WHERE user_id = 
(
SELECT user_id,longitude,latitude from mycatch 
WHERE catch_id>'$catch_id' 
) 

エラーを取得するために失敗は次のとおりです。

#1241 - オペランドは、まず1列(複数可)

+0

SQLは意味がありません。サブクエリから 'user_id'を必要とするだけなら、なぜ' longitude'と 'latitude'を選択するのですか?なぜ外側の' SELECT'が値を設定するのですか? – BoltClock

答えて

1
Select m.longitude,m.latitude from user u left join mycatch m 
on u.user_id =m.user_id 
where u.ud_id=$ud_id and 
m.catch_id >$catch_id 
+0

私はちょうど与えられたud_idとcatch_idに対してmycatchから経度と緯度を必要とします – hunter

+0

更新された答え –

+0

thnksは今それを完了しました... – hunter

2

が含まれている必要がありますサブクエリをまったく使用しないようにしてください。MySQLでは非常に遅いです。

第2に、サブクエリはここでも役立たないでしょう。これは定期的な参加です(いいえ、内部の参加ではありません)。

SELECT ud_id FROM user, mycatch 
WHERE catch_id>'$catch_id' 
AND user.user_id = mycatch.user_id 
関連する問題