kvigor wrote:
Jim,
Please excuse the ignorance, I'm a newbie, but I'm only use to simple
SELECT, INSERT statements.
Your original code: $SQL = "SELECT * FROM my_Table WHERE CONCAT(value1,
value2, value3) IN ('".join("','", $list)."')
This can be broken down into smaller parts so to explain by example.
# This is to clean the input values for the SQL statement
function mysql_clean($value) {
return mysql_real_escape_string($value);
}
# Define your list of values to compare to
$list = array(
'6blue40lbs',
'7orange50lbs',
'8orange60lbs',
'9purple70lbs',
);
# You will want to do something like this with the values of the $list
# array just to make sure they are clean: reference the function above
array_walk($list, 'mysql_clean');
# This will return a string formated like this.
# '6blue40lbs','7orange50lbs','8orange60lbs','9purple70lbs'
$IN_VALUE = "'".join("','", $list)."'";
$SQL = "SELECT *
FROM my_Table
WHERE CONCAT(value1, value2, value3)
IN ({$IN_VALUE})";
# The final query string will look like this
SELECT *
FROM my_Table
WHERE CONCAT(value1, value2, value3)
IN ('6blue40lbs','7orange50lbs','8orange60lbs','9purple70lbs')
# Now run this through your query function and get the results
$results = mysql_query($SQL) OR die('SQL Failure: '.$SQL);
So basically what we have is a comparison that is based off the output
of the CONCAT() function that creates one string out of value1, value2,
value3 and then compares that with each of the values listed within the
parenthesis. the IN (...) part of the SQL statement tells SQL that it
is getting a list of values that it should compare the concat() value
against.
Doing it this way, will allow you to only run one query instead of
running one per value that you want to compare against. As you can
tell, as your data set grows your multiple queries would drag your DB to
a halt
Hope this explains it.
Let me know if you need further explanation.
OK, I get everything up to the ('''.join(''','''$list).''')
I'm guessing that the .join( ). putting together some values, but I don't
know what
also the .join( ). is to be preceded by something... I don't know what.
//Forgive my ignorance, I'll can get it.
Also the .join( ). what is this doing I looked at the PHP and MySQL function
of each, and haven't seen comparable code.
I'm asking because I don't know where we're telling the code to compare the
values.
You stated...
and create one string from them
Where do I give the name to the string?
So this is where I am so far:
$sql = "SELECT* FROM table WHERE CONCAT(size,color,weight) IN( )";
"Jim Lucas" <lists@xxxxxxxxx> wrote in message
news:4685FDE7.8000703@xxxxxxxxxxxx
K. Hayes wrote:
Will do. Thanks.
----- Original Message ----- From: "Jim Lucas" <lists@xxxxxxxxx>
To: "kvigor" <k3cheese@xxxxxxxxxxxxx>
Cc: <php-general@xxxxxxxxxxxxx>
Sent: Saturday, June 30, 2007 1:46 AM
Subject: Re: Selecting Rows Based on Row Values Being in Array
kvigor wrote:
Hello All,
I'm attempting to return rows from a mysql DB based on this criteria:
I have a list, in the form of an array that I need to compare against
each row
in the table. Where theres a match I need that entire row returned.
e.g. $varListof 3outOf_10Fields = array(6blue40lbs, 7orange50lbs,
8orange60lbs, 9purple70lbs);
The array contains 3 of the db row fields in 1 value. However there are
10 fields/columns in the table.
===============
what table looks like |
===============
size color weight
ROW 1 | value1 | value1 | value1 | value1 | value1 | value1 |
So how could I set up a query that would SELECT the entire row, if the
row contained $varListof 3outOf_10Fields[1].
Open to any suggestions or work arounds. I'm playing with extract()
but code is too crude to even post.
I would suggest approaching the problem with a slightly different
thought.
just have the sql concat() the columns together and then compare.
something like this should do the trick
$list = array(
'6blue40lbs',
'7orange50lbs',
'8orange60lbs',
'9purple70lbs',
);
$SQL = "
SELECT *
FROM my_Table
WHERE CONCAT(value1, value2, value3) IN ('".join("','", $list)."')
";
mysql_query($SQL);
this should take, for each row in the DB, value1 + value2 + value3 and
create one string from them, then it will compare each string in the
IN (...) portion to each entry in the $list array().
Let me know if you need any further help
one other thing, make sure that you run each of the values in the $list
array() through mysql_real_escape_string(). That way it is all nicely
encoded for the SQL statement.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php