2013-02-12 33 views
8

मैं के साथ एक प्रश्न बनाने के लिए कोशिश कर रहा हूँ Slick 1.0.0 कि एक पंक्ति निम्नलिखित एसक्यूएल बयान के बराबर गिनती रिटर्न:गणना पंक्तियों स्लिक 1.0.0

SELECT COUNT(*) FROM table; 

क्या मैं अब तक है:

val query = for { 
    row <- Table 
} yield row 
println(query.length) 

यह प्रिंट [email protected] है। इसके अलावा, query.lengthscala.slick.lifted.Column प्रकार का प्रतीत होता है। मुझे क्वेरी निष्पादित करने का कोई तरीका नहीं मिल रहा है। दस्तावेज और कहीं और में जो भी उदाहरण मिल सकते हैं, वे Column पर काम नहीं करते हैं या ScalaQuery के लिए हैं और अब और काम नहीं करते हैं।

इसे निष्पादित करने के लिए मैं क्या कर सकता हूं?

उत्तर

2

उपयोग:

val query = for(row <- Table) yield row 
println(Query(query.count).first) 

count "COUNT का चयन करें (*) तालिका से" के बराबर है। पहली और एकमात्र पंक्ति प्राप्त करने के लिए आपको गिनती प्राप्त करने के लिए first का उपयोग करना होगा।

+2

बस एक त्वरित नोट: 'लंबाई' के पक्ष में 'गिनती' को बहिष्कृत किया गया है। – notan3xit

+0

ठीक है, क्या यह आपके लिए काम करता है? – thikonom

+2

क्या कोई विचार है कि 'scala.slick.lifted.Column' के मानों के साथ क्या किया जाता है जो' लंबाई' जैसी विधियों द्वारा लौटाए जाते हैं? आपका समाधान काम करता है, लेकिन तीन 'चयन' के साथ काफी लंबा बयान उत्पन्न करता है। यह बिना किसी और आवश्यकता के सरल गणना के लिए एक बहुत ही भयानक लगता है: 'x2.x3 का चयन करें (x3 के रूप में गिनती (1) का चयन करें (x4.'id' का चयन करें, x4.'value '' table 'x4 से) x5) x2' – notan3xit

4

इनमें से किसी चाल करना चाहिए:

Query(MyTable).list.length 

या

(for{mt <- MyTable} yield mt).list.length 

या

(for{mt <- MyTable} yield mt.count).first 

अद्यतन:

पंचायती राज एच 2 डेटाबेस लॉग nting पिछले क्वेरी, जो इष्टतम लग रहा है के लिए यह पता चलता है:

03:31:26.560 [main] DEBUG h2database - jdbc[2] 
/**/PreparedStatement prep10 = conn1.prepareStatement("select select count(1) from \"MYTABLE\" s5", 1003, 1007); 
+5

अच्छा, यह गिनने से पहले पूर्ण परिणाम सेट के साथ एक सूची तैयार करेगा। यह निश्चित रूप से काम करता है, लेकिन बहुत बड़ी तालिकाओं के लिए यह अव्यवहारिक है, क्योंकि समय और स्थान दोनों की ओ (एन) जटिलता में लंबाई की गणना की जाएगी। – notan3xit

+0

मैंने एक और जोड़ा है, लेकिन यह वही चुनिंदा कथन उत्पन्न कर सकता है जैसा कि थिकोनॉम के उत्तर में से एक है। हालांकि यह थोड़ा अलग है – Jack

+0

आपके तीसरे संस्करण के लिए मुझे 'MySQLSyntaxErrorException' मिलता है। – notan3xit

4

हालांकि मैं जिसके परिणामस्वरूप एसक्यूएल जांच करने के लिए सक्षम नहीं था, तो आप .list छोड़ने के द्वारा कम स्रोत मिल सकता है:

Query(MyTable.length).first 
+0

यह मेरे लिए सबसे साफ समाधान की तरह दिखता है, लेकिन यह अभी भी एसक्यूएल उत्पन्न करता है जो सभी क्षेत्रों को 'मायटेबल' में गिना जाता है और "MyTable" से SELECT COUNT (*) के रूप में काफी कुशल नहीं है; ' – dbau

+0

समस्या पृष्ठ: https : //github.com/slick/slick/issues/175 वहां एक टिप्पणी छोड़ दो। – Tvaroh

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

  • कोई संबंधित समस्या नहीं^_^