Re: [PHP] & and && and weird results

2009-04-01 Thread Chris



Thanks for that. I understand. Somehow, I had tried OR at one point but
I got one of those orange boxes probably for some other error and in the
confusion of my neurons I overlooked it.
However, I am puzzled that using & (not &&) did give a lot of results,
almost the whole db which is thankfully not very big for testing purposes.


&& means "and".

"&" is a bitwise operation.

These pages explain it much better than I can.

http://dev.mysql.com/doc/refman/5.0/en/bit-functions.html
http://au.php.net/manual/en/language.operators.bitwise.php


--
Postgresql & php tutorials
http://www.designmagick.com/


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] & and && and weird results

2009-04-01 Thread PJ
Lex Braun wrote:
> PJ,
>
> On Wed, Apr 1, 2009 at 1:40 PM, PJ  > wrote:
>
> SELECT * FROM book
>WHERE id IN (SELECT bookID
>FROM book_author WHERE authID IN (SELECT author.id
> 
>FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
> LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));
>
>
> Say $Auth = "I", $Auth1 = "J", $Auth2 = "K".
> The above sub-query is stating select author ids where the first digit
> in last_name is I AND the first digit in last_name is J AND the first
> digit in last_name is K.  For any given last_name (thus, author id),
> the first digit can only be one of those options, thus this sub-query
> will return ZERO results.
>
> To get a sub-query that will only return results that start with I, J,
> or K, you can instead use the following sub-query:
> SELECT author.id  FROM author WHERE LEFT(last_name,
> 1) = '$Auth' OR LEFT(last_name, 1) = '$Auth1' OR LEFT(last_name, 1) =
> '$Auth2'
>
> The above will return all author IDs where the surname starts with I,
> J, or K.
>
> - Lex
>
Thanks for that. I understand. Somehow, I had tried OR at one point but
I got one of those orange boxes probably for some other error and in the
confusion of my neurons I overlooked it.
However, I am puzzled that using & (not &&) did give a lot of results,
almost the whole db which is thankfully not very big for testing purposes.

-- 
unheralded genius: "A clean desk is the sign of a dull mind. "
-
Phil Jourdan --- p...@ptahhotep.com
   http://www.ptahhotep.com
   http://www.chiccantine.com/andypantry.php


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] & and && and weird results

2009-04-01 Thread Lex Braun
PJ,

On Wed, Apr 1, 2009 at 1:40 PM, PJ  wrote:

> SELECT * FROM book
>WHERE id IN (SELECT bookID
>FROM book_author WHERE authID IN (SELECT author.id
>FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
> LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));
>

Say $Auth = "I", $Auth1 = "J", $Auth2 = "K".
The above sub-query is stating select author ids where the first digit in
last_name is I AND the first digit in last_name is J AND the first digit in
last_name is K.  For any given last_name (thus, author id), the first digit
can only be one of those options, thus this sub-query will return ZERO
results.

To get a sub-query that will only return results that start with I, J,
or K,you can instead use the following sub-query:
SELECT author.id FROM author WHERE LEFT(last_name, 1) = '$Auth' OR
LEFT(last_name, 1) = '$Auth1' OR LEFT(last_name, 1) = '$Auth2'

The above will return all author IDs where the surname starts with I, J, or
K.

- Lex


Re: [PHP] & and && and weird results NOT solved but FIXED ....

2009-04-01 Thread PJ
PJ wrote:
> Kyle Smith wrote:
>   
>> Kyle Smith wrote:
>> 
>>> PJ wrote:
>>>   
 I hope somebody can make sense of this.
 First, I don't understand what the difference is supposed to be between
 & and && - is there a difference for php and/or mysql?
 Second, I am trying to select all occurrences in a table.column where
 the first letter of the name is I, J, or K but not I or J or K; I want
 the all. Now, entering the following is no problem for any one letter:
 SELECT * FROM book
 WHERE id IN (SELECT bookID
 FROM book_author WHERE authID IN (SELECT author.id
 FROM author
 WHERE LEFT(last_name, 1 ) = '$Auth' ));

 But the following does not work:

 SELECT * FROM book
 WHERE id IN (SELECT bookID
 FROM book_author WHERE authID IN (SELECT author.id
 FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
 LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));

 Yet this gives off the wall results where the last names are nowhere
 near what they should be.
 Anyone have a rational explanation?

   
 
>>> I wasn't aware that && was an option in MySQL, I've always used
>>> "AND".  If there is a difference it's probably the same as in PHP and
>>> many other languages.  Allow me to explain.
>>>
>>> In the case of & the left-side expression is evaluated for true and
>>> if not true, the right side expression is not evaluated.  In the case
>>> of && both sides are evaluated regardless of the value of either
>>> side.  Here's an example:
>>>
>>> $a = 1;
>>> $b = 2;
>>>
>>> $result = ($a == 2) && $b++; //  In this case, $a does not equal two
>>> and therefor the left-side is false, thus the right-side is never
>>> evaluated.  $b remains 2.
>>>
>>> $result = ($a == 2) & $b++;
>>> //  In this case, $a still does not equal two and therefor the
>>> left-side is still false, however because we use the '&' operator the
>>> right side is evaluated anyway and $b now equals 3.
>>>
>>> echo $result;
>>> //  In both cases, $result is false.
>>>
>>> HTH,
>>> Kyle
>>>
>>>
>>>   
>> Oops, my first paragraph is backwards.  I'm sure that was confusing! 
>> My example is the correct logic for && and &, and the paragraph before
>> that is exactly wrong.
>>
>> 
> Not really clear... I thought that $b+ would == 3 ; why two + ?
>
> But this does not explain the weir results I am getting; and BTW, if I
> use AND does not work either.
> What am I supposed to use to get the results I am looking for?
>
>   
I did fix it - it seems that OR does the trick.
But I sure would like to understand why & does not work?

-- 
unheralded genius: "A clean desk is the sign of a dull mind. "
-
Phil Jourdan --- p...@ptahhotep.com
   http://www.ptahhotep.com
   http://www.chiccantine.com/andypantry.php


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] & and && and weird results

2009-04-01 Thread PJ
Kyle Smith wrote:
> Kyle Smith wrote:
>> PJ wrote:
>>> I hope somebody can make sense of this.
>>> First, I don't understand what the difference is supposed to be between
>>> & and && - is there a difference for php and/or mysql?
>>> Second, I am trying to select all occurrences in a table.column where
>>> the first letter of the name is I, J, or K but not I or J or K; I want
>>> the all. Now, entering the following is no problem for any one letter:
>>> SELECT * FROM book
>>> WHERE id IN (SELECT bookID
>>> FROM book_author WHERE authID IN (SELECT author.id
>>> FROM author
>>> WHERE LEFT(last_name, 1 ) = '$Auth' ));
>>>
>>> But the following does not work:
>>>
>>> SELECT * FROM book
>>> WHERE id IN (SELECT bookID
>>> FROM book_author WHERE authID IN (SELECT author.id
>>> FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
>>> LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));
>>>
>>> Yet this gives off the wall results where the last names are nowhere
>>> near what they should be.
>>> Anyone have a rational explanation?
>>>
>>>   
>> I wasn't aware that && was an option in MySQL, I've always used
>> "AND".  If there is a difference it's probably the same as in PHP and
>> many other languages.  Allow me to explain.
>>
>> In the case of & the left-side expression is evaluated for true and
>> if not true, the right side expression is not evaluated.  In the case
>> of && both sides are evaluated regardless of the value of either
>> side.  Here's an example:
>>
>> $a = 1;
>> $b = 2;
>>
>> $result = ($a == 2) && $b++; //  In this case, $a does not equal two
>> and therefor the left-side is false, thus the right-side is never
>> evaluated.  $b remains 2.
>>
>> $result = ($a == 2) & $b++;
>> //  In this case, $a still does not equal two and therefor the
>> left-side is still false, however because we use the '&' operator the
>> right side is evaluated anyway and $b now equals 3.
>>
>> echo $result;
>> //  In both cases, $result is false.
>>
>> HTH,
>> Kyle
>>
>>
> Oops, my first paragraph is backwards.  I'm sure that was confusing! 
> My example is the correct logic for && and &, and the paragraph before
> that is exactly wrong.
>
Not really clear... I thought that $b+ would == 3 ; why two + ?

But this does not explain the weir results I am getting; and BTW, if I
use AND does not work either.
What am I supposed to use to get the results I am looking for?

-- 
unheralded genius: "A clean desk is the sign of a dull mind. "
-
Phil Jourdan --- p...@ptahhotep.com
   http://www.ptahhotep.com
   http://www.chiccantine.com/andypantry.php


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] & and && and weird results

2009-04-01 Thread Kyle Smith

Kyle Smith wrote:

PJ wrote:

I hope somebody can make sense of this.
First, I don't understand what the difference is supposed to be between
& and && - is there a difference for php and/or mysql?
Second, I am trying to select all occurrences in a table.column where
the first letter of the name is I, J, or K but not I or J or K; I want
the all. Now, entering the following is no problem for any one letter:
SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author
WHERE LEFT(last_name, 1 ) = '$Auth' ));

But the following does not work:

SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));

Yet this gives off the wall results where the last names are nowhere
near what they should be.
Anyone have a rational explanation?

  
I wasn't aware that && was an option in MySQL, I've always used 
"AND".  If there is a difference it's probably the same as in PHP and 
many other languages.  Allow me to explain.


In the case of & the left-side expression is evaluated for true and if 
not true, the right side expression is not evaluated.  In the case of 
&& both sides are evaluated regardless of the value of either side.  
Here's an example:


$a = 1;
$b = 2;

$result = ($a == 2) && $b++; //  In this case, $a does not equal two 
and therefor the left-side is false, thus the right-side is never 
evaluated.  $b remains 2.


$result = ($a == 2) & $b++;
//  In this case, $a still does not equal two and therefor the 
left-side is still false, however because we use the '&' operator the 
right side is evaluated anyway and $b now equals 3.


echo $result;
//  In both cases, $result is false.

HTH,
Kyle


Oops, my first paragraph is backwards.  I'm sure that was confusing!  My 
example is the correct logic for && and &, and the paragraph before that 
is exactly wrong.


--
*Kyle Smith*
UNIX/Linux Systems Administrator
Inforonics, LLC



Re: [PHP] & and && and weird results

2009-04-01 Thread Kyle Smith

PJ wrote:

I hope somebody can make sense of this.
First, I don't understand what the difference is supposed to be between
& and && - is there a difference for php and/or mysql?
Second, I am trying to select all occurrences in a table.column where
the first letter of the name is I, J, or K but not I or J or K; I want
the all. Now, entering the following is no problem for any one letter:
SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author
WHERE LEFT(last_name, 1 ) = '$Auth' ));

But the following does not work:

SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));

Yet this gives off the wall results where the last names are nowhere
near what they should be.
Anyone have a rational explanation?

  
I wasn't aware that && was an option in MySQL, I've always used "AND".  
If there is a difference it's probably the same as in PHP and many other 
languages.  Allow me to explain.


In the case of & the left-side expression is evaluated for true and if 
not true, the right side expression is not evaluated.  In the case of && 
both sides are evaluated regardless of the value of either side.  Here's 
an example:


$a = 1;
$b = 2;

$result = ($a == 2) && $b++; 
//  In this case, $a does not equal two and therefor the left-side is 
false, thus the right-side is never evaluated.  $b remains 2.


$result = ($a == 2) & $b++;
//  In this case, $a still does not equal two and therefor the left-side 
is still false, however because we use the '&' operator the right side 
is evaluated anyway and $b now equals 3.


echo $result;
//  In both cases, $result is false.

HTH,
Kyle


--
*Kyle Smith*
UNIX/Linux Systems Administrator
Inforonics, LLC



[PHP] & and && and weird results

2009-04-01 Thread PJ
I hope somebody can make sense of this.
First, I don't understand what the difference is supposed to be between
& and && - is there a difference for php and/or mysql?
Second, I am trying to select all occurrences in a table.column where
the first letter of the name is I, J, or K but not I or J or K; I want
the all. Now, entering the following is no problem for any one letter:
SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author
WHERE LEFT(last_name, 1 ) = '$Auth' ));

But the following does not work:

SELECT * FROM book
WHERE id IN (SELECT bookID
FROM book_author WHERE authID IN (SELECT author.id
FROM author WHERE LEFT(last_name, 1 ) = '$Auth' &&
LEFT(last_name, 1 ) = '$Auth1' && LEFT(last_name, 1 ) = '$Auth2'));

Yet this gives off the wall results where the last names are nowhere
near what they should be.
Anyone have a rational explanation?

-- 
unheralded genius: "A clean desk is the sign of a dull mind. "
-
Phil Jourdan --- p...@ptahhotep.com
   http://www.ptahhotep.com
   http://www.chiccantine.com/andypantry.php


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php