Hi Jeremy,
Ran into another interesting thing:
Assuming I have some attribute on users like "state", which might be nil.
This query does just what I would expect:
conversations = Conversation.eager_graph(:messages=>:user).where{{users[:
state] => ['CA','TX','NY'] }}.all
And so does this one:
conversations = Conversation.eager_graph(:messages=>:user).where{{users[:
state] => nil }}.all
But I can't seem to combine the two:
conversations = Conversation.eager_graph(:messages=>:user).where{{users[:
state] => [nil, 'CA'] }}.all
^ In that case the ones with `nil` are missing from the query. I assume
this is probably another syntax thing I'm missing, but I haven't been able
to figure it out. Any way to combine "null" into a list of conditions?
Thanks!
Andrew
On Thursday, November 10, 2016 at 6:22:47 PM UTC-5, Andrew Burleson wrote:
>
> Hi Jeremy,
>
> I'll try that out. I'm afraid this is stretching the limits of my SQL
> knowledge, so I'm not sure exactly the SQL I want, but I think I understand
> what your query is doing so I'll play with it and let you know if I come to
> a better understanding and need to learn something different :)
>
> Thanks so much for all your help. I don't know how you keep up with all us
> folks, but it's really appreciated!
>
> Andrew
>
> On Thursday, November 10, 2016 at 5:38:59 PM UTC-5, Jeremy Evans wrote:
>>
>> On Thursday, November 10, 2016 at 1:40:06 PM UTC-8, Andrew Burleson wrote:
>>>
>>> Hey Jeremy, thanks so much for this answer. After some fiddling around I
>>> got it to do what I wanted, but now I ran into another interesting side
>>> effect.
>>>
>>> When it comes to limiting the results, I'd ideally like to limit by a
>>> total number of conversations and load however many messages that happened
>>> to include. IE: load three conversations, and if each conversation has 5
>>> messages or 50 messages, I don't really care.
>>>
>>> When I use .limit on the end of that eager graph, it's limiting the
>>> total number of messages coming through, which I think I understand from a
>>> dataset point of view.
>>>
>>> However, since that's not really the behavior I want, is there any way
>>> to limit on the number of conversations returned instead of the number of
>>> messages?
>>>
>>
>> It would be better to describe the SQL you want to execute. Since you
>> didn't do that, my guess is you want something like:
>>
>> ds = Conversation.eager_graph(:messages=>:user).where{{users[:id]=>1}}
>>
>> ds.where{{conversations[:id]=>ds.select(conversations[:id]).from_self.distinct.order(:id).limit(3)}}.all
>>
>> That makes the limit pick the first three matching conversations by id.
>> If you want to limit based on an existing order on the dataset, that's
>> going to be more involved. In that case, you really need to describe what
>> SQL you want to execute.
>>
>> Thanks,
>> Jeremy
>>
>
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sequel-talk.
For more options, visit https://groups.google.com/d/optout.