I have several columns in my databases with similar names. How do I select those based on the word they start with? Here's an example table layout:
I tried selecting all info for a particular thing (food kind in this example) using
$Food = "Vegetable"; mysql_query("SELECT `" . $Food . " %` FROM `Foods`");
but it didn't seem to work.
Any help would be appreciated :-)
EDIT: Apparently this wasn't clear from my example, but I already know all column's first words. The columns are always the same and no 'food kinds' are ever added or deleted. The PHP variable is only there to determine which one of a couple of set kinds I need.
* is the wildcard character used to select all available columns in a table. When used as a substitute for explicit column names, it returns all columns in all tables that a query is selecting FROM .
The SELECT clause specifies a list of properties (columns) by name, or the wildcard character (“*”) to mean “all properties”.
The reason I use SELECT COLUMN_NAMES is when using Stored Procedure, adding columns to the table will not screw your application. select * will give additional column (which you've just added to the table) and application will get additional column and may raise error.
You'd have to build the SQL dynamically. As a starting point, this would get you the column names you're seeking.
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'Foods' AND table_schema = 'YourDB' AND column_name LIKE 'Vegetable%'
There's no way to do exactly what you're trying to. You could do another query first to fetch all the column names, then process them in PHP and build the second query, but that's probably more complex than just writing out the names that you want.
Or is there a reason this query needs to be dynamic? Will the table's structure change often?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With