2011-12-22 5 views
5

अब तक, मुझे लगता है कि सिद्धांत में यादृच्छिक पंक्ति का चयन करने का कोई तरीका नहीं है। तो मैं सोच रहा हूँ मैं एक प्रश्न है पंक्तियों की संख्या प्राप्त करने के लिएसिद्धांत 2 यादृच्छिक रूप से एक पंक्ति का चयन (ऑफ़सेट 0 या 1 अनुक्रमित)?

// pseudo code 
$count = SELECT COUNT(i) FROM Item i WHERE ... 

फिर, एक यादृच्छिक पीएचपी से ऑफसेट का उपयोग कर आइटम प्राप्त करने के लिए एक वास्तविक क्वेरी setFirstResult में डाल दिया

$item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingleResult() 

प्रश्न है मेरा rand() क्या मैं 0 या 1 से शुरू करता हूं? फिर अंत? $count या $count-1?

उत्तर

5

setFirstResult() 0-आधारित है।

अपने दृष्टिकोण के बाद, आप का उपयोग करना होगा:

->setFirstResult(rand(0, $count - 1))->setMaxResults(1)->getSingleResult(); 

स्रोत:

मैं मानता हूँ प्रलेखन उस बिंदु पर स्पष्ट नहीं है। हालांकि, हम देख सकते हैं कि सिद्धांत \ DBAL \ क्वेरी \ QueryBuilder इसे उस तरह से उपयोग करता है:

->modifyLimitQuery($query, $this->maxResults, $this->firstResult); 

कौन सा तो सिद्धांत \ DBAL \ प्लेटफार्म \ में SQL करने के लिए अनुवाद किया है AbstractPlatform:

final public function modifyLimitQuery($query, $limit, $offset = null) 
{ 
    ... 
    $query .= ' OFFSET ' . $offset; 

OFFSET जा रहा है 0 एसक्यूएल में आधारित, हम उस सेट को घटा सकते हैं फर्स्ट रीसेट() 0-आधारित भी है।

0

मैं अपने अनुप्रयोग में उपयोग करें:

$item = (SELECT i FROM Item WHERE ...) 
    ->setMaxResults($count) 
    ->setFirstResult(1)->getSingleResult(); 

शुरू रिकॉर्ड

+1

क्या यह एक यादृच्छिक पंक्ति का चयन करता है? या आपका मतलब है कि पहला परिणाम 1 से शुरू होता है? तो एक यादृच्छिक पंक्ति का चयन करने के लिए, मैं '-> setMaxResults (1) -> setFirstResult (रैंड (1, $ गिनती))'? –

+0

मेरा मतलब है कि पहला परिणाम 1 है और आखिरी कुल – rkmax

+0

शायद आप मुझे गलत समझा, मुझे एक * सिंगल * यादृच्छिक पंक्ति –

0

कोई फर्क नहीं पड़ता कि आप 0 या 1 से शुरू की कुल तक 1 से गिनती करने के लिए, आप गिनती और गिनती करने के लिए संबंधित अंत ले लेना चाहिए -1 क्रमशः

+0

क्षमा करें, आपका क्या मतलब है? मुझे लगता है कि अगर मैं 0 या 1 का उपयोग करता हूं तो निश्चित रूप से एक अंतर होता है? –

+0

हां, एक अंतर है, व्याख्या के अपने तरीके के साथ व्याख्या चल रही है .. आर 8 .. ??? और इसलिए यह उपयोग –

+0

पर निर्भर करता है आप आर 8 द्वारा क्या मतलब है? –

संबंधित मुद्दे