2015-01-22 3 views
0
에서 가진

내 테이블 :GROUPBY 및 web2py

나는 무작위로 name에서 5 이름을 표시 할
db.define_table('test', Field('name'), Field('pics', 'upload')) 

, 그때는 무작위 중 하나와 일치하는 ID를 가지고있는 pics에서 하나 개의 사진을 표시 할 선택된 이름.

는 작업입니다 :

def index(): 
    rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>') 
    myorder = rows==id 
    rows_two = db().select(db.test.ALL, limitby=(0, 1), groupby=db.test.pics, having=myorder) 
    return locals() 

그리고 이것은이다 :

{{for i in rows_two:}} 
<div style="text-align:left"> 
<img width="200px" 
    src="{{=URL('download', args=i.pics)}}" /> 
</div> 
{{pass}} 
{{block left_sidebar}} 
{{for row in rows:}} 
{{=LI(A(row.name, _href=URL('other', args=row.id)))}} 
{{pass}} 
{{end}} 

내가 달성하고자하는 pics에서 하나 개의 이미지를 표시하는 것입니다 ID가 무작위로 표시 중 하나와 일치의 이름. 물론,이 작동하지 않습니다, 그래서 나는이 도움을 주시면 감사하겠습니다. 매우 감사합니다.

+0

왜 두 번째 쿼리가 필요합니까? 'rows'의 첫 번째 레코드 (또는'rows'의 레코드) 만 그림을 표시 할 수 있습니까? – Anthony

+0

@Anthony 예,'rows'의 첫 번째 레코드에서 이미지와 이름을 표시하려고 시도했지만 'name'과 'pics'의 표시 방법을 알아 내지 못했습니다. limitby = (0,5)'와'limitby = (0,1)'과 같은 질의를 사용하지만 나는 제대로 이해하지 못했습니다. –

답변

0

rows의 각 레코드에는 이미 그림이 포함되어 있으므로 rows_two이 필요하지 않은 것처럼 보입니다. 따라서 그 중 하나만 사용할 수 있습니다. 그래서, 다음에 코드를 변경 :

def index(): 
    rows = db().select(db.test.ALL, limitby=(0, 5), orderby='<random>') 
    return locals() 

을보기에서 :

<div style="text-align:left"> 
<img width="200px" 
    src="{{=URL('download', args=rows[0].pic)}}" /> 
</div> 

주, 뷰는 단순히 rows의 첫 번째 레코드에서 그림을 표시합니다.

+0

대단히 감사합니다. 나는'args'를 더 잘 이해할 필요가 있고 나를 많이 돕는다. 감사합니다. BTW : 이미지가'rows'의 레코드에서 무작위로 표시되는 방식으로 뷰에서'random'을 사용하는 방법이 있습니까? 항상 첫 번째 레코드뿐만 아니라? –

+0

나는 그것을 믿을 수는 없지만 이전 질문에 대한 나의 질문에 대한 대답을 알아 냈다고 생각한다. 이것은'view'에서 내가 한 것입니다 : '{{import random k = random.randint (0, 4)}}''src = "{{URL ('download', args = rows [k] .pics)}} "". 이제 이미지는 첫 번째 레코드를 표시하는 대신'rows'의 레코드에서 무작위로 표시됩니다. 이것이 올바른 방법일까요? 그것은 작동하는 것 같습니다. 그런 다음, 나는 약간의 진전을 이루고 있다고 생각합니다! 고마워! –

+0

새로운 문제가 발생했습니다. 이제 나는 5 개의 무작위'name'과 1 개의 무작위'pics'를 가지고 있고, 1 개의'pics'는 5 개의'name' 중 하나와 같은 id를가집니다. 'pics'와 일치하는'name'이 클릭되면 나는'other' 액션에서 무언가를하고 싶습니다. 기본적으로 옳은 대답을 말하고 다른 네 개의 'name'이 클릭되면 다른 것을하고 싶습니다. 기본적으로 잘못된 것입니다. '다른'행동으로 대답하십시오. 나는이 일이 일어나도록하기 위해 모든 것을 시도했지만 실패했습니다. 이 질문을 별도의 질문으로 게시해야합니까, 아니면 여기에서 도와 드릴 수 있습니까? –