0

私はこの種のmysqldb(テーブル名/フィールド)を持っています

tbl_users:id、title、承認済み

tbl_photos:id、user_id、title、filename

ユーザーに1つの行があり、3枚の写真があります(すべてuser_id =ユーザーのID)

これを行う:

select 
tbl_users.*, 
tbl_photos.filename 

from tbl_users 

left join tbl_photos on tbl_photos.user_id = tbl_users.id 

where tbl_users = '1' order by rand() 

(テーブルクエリは少し簡略化されています)

そのSQLクエリを実行すると、3つの行が返されます。1つの行だけが必要です(つまり、ユーザー行と、そのユーザーIDのuser_idを持つランダムな写真が必要です)

私はすべての結合を試しました-左右内側ですが、常に3行を返します

4

4 に答える 4

2

コードは次のようになります

select 
tbl_users.*, 
tbl_photos.filename 

from tbl_users 

left join tbl_photos on tbl_photos.user_id = tbl_users.id 

where tbl_users = approved order by rand() LIMIT 1

LIMITキーワードは、1行のみを返すクエリを制限します。

my-sqlコマンドの例の簡単なリストはここにあります http://itswadesh.wordpress.com/2011/04/12/mysql-commands/

于 2012-05-04T03:33:34.563 に答える
0

また、追加しDISTINCTます:

select  DISTINCT tbl_users.id, 
        tbl_users.title, 
        tbl_users.approved, 
        tbl_photos.filename 
from tbl_users left join tbl_photos 
       on tbl_photos.user_id = tbl_users.id 
where tbl_users = 'approved' order by rand() 
于 2012-05-04T03:39:35.273 に答える
0

それぞれに1行だけを取得したい場合は、このようにするのは非常に簡単です。

select 
tbl_users.*, 
GROUP_CONCAT(tbl_photos.filename) as Photos

from tbl_users 

left join tbl_photos on tbl_photos.user_id = tbl_users.id 

where tbl_users = '1' order by rand() 

1つのフィールドにコンマで区切られた値が表示されます

于 2012-05-04T05:47:47.973 に答える
0

ファイル名がtbl_photosから取得する唯一のフィールドである場合、これにより必要なものが提供される可能性があります。

select 
    tbl_users.*, 

    (select filename 
     from tbl_photos where user_id = tbl_users.id 
     order by rand()
     limit 1) as filename

from tbl_users 

写真から他の情報が必要な場合は、次のクエリを使用します。

select tbl_users.*, 'x' as separator, tbl_photos.*
from tbl_users
left join tbl_photos on tbl_photos.user_id = tbl_users.id
where (tbl_users.id, tbl_photos.id) in

    (  
    -- you can run this query independently
        select 

            id, 

            (select id 
             from tbl_photos 
             where user_id = tbl_users.id 
             order by rand() 
             limit 1) 

        from tbl_users
    )
于 2012-05-04T06:06:20.560 に答える