<html><body><div style="color:#000; background-color:#fff; font-family:arial, helvetica, sans-serif;font-size:12pt"><div><span>Thanks. It works now. But I guess I can take Boombatowers conversions with a grain of salt.<br></span></div><div>&nbsp;</div><div><font color="#ff007f" face="bookman old style, new york, times, serif" size="4"><i><strong>Nancy</strong></i></font></div>&nbsp;<div><font face="arial, helvetica, sans-serif">Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.</font></div><div><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div style="font-family: arial, helvetica, sans-serif; font-size: 12pt;"><div style="font-family: times new roman, new york, times, serif; font-size: 12pt;"><font face="Arial" size="2"><hr size="1"><b><span style="font-weight:bold;">From:</span></b> Jamie Holly<br></font><br>
<div id="yiv1281991303">
  

    
  
  <div>
    Doing a join doesn't return the query interface, but rather the
    alias that was assigned to the joined table. Since variable
    assignment is processed left to right once it processes the ::join
    method your $users variable now contains the table alias.<br>
    <br>
    What you want to do is stop your chaining before any methods that
    don't return the SelectQuery object you are building:<br>
    <br>
    $query = db_select('user_badges_user', 'ubu')<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;fields('u', array('uid', 'name'))<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;condition('ubu.bid', $badge-&gt;bid); // Up to here you
    get a SelectQueryInterface returned and assigned to query<br>
    $query-&gt;join('users', 'u', 'u.uid = ubu.uid'); // Calls the join
    method on $query, but doesn't assign the return;<br>
    $users = $query-&gt;execute(); // Returns the
    DatabaseStatementInterface that you pull your results from<br>
    <br>
    Generally I try to add joins at the beginning of the construction.
    It seems to make it easier to read (it seems most of Drupal's core
    code does the same), so I would write this query like this:<br>
    <br>
    $query = db_select('user_badges_user', 'ubu');<br>
    $query-&gt;join('users', 'u', 'u.uid = ubu.uid');<br>
    $query-&gt;fields('u', array('uid', 'name'))<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;condition('ubu.bid', $badge-&gt;bid);<br>
    $users = $query-&gt;execute();<br>
    <br>
    You could assign $users when you add the fields and conditions, but
    this does make it easier if you want to add anything else to the
    query down the road. <br>
    <br>
    Easiest thing to remember is that if you get a non-member/non-object
    error, then the item right above that doesn't return the proper
    class and you should stop variable assignment there and instead just
    call the method without assignment (ie: $query-&gt;join('users',
    'u', 'u.uid = ubu.uid')). <br>
    <br>
    Chaining might look a little better and save a few keystrokes,&nbsp; but
    it really doesn't bring any performance enhancements and can keep
    headaches to a minimum, especially when working on classes you
    aren't that familiar with. <br></div></div></div></div></blockquote></div></div></body></html>