Chr*_*ris 22 php mysql select wildcard
我的数据库中有几个名称相似的列.如何根据他们开头的单词选择那些?这是一个示例表格布局:

我尝试使用选择特定事物的所有信息(本例中的食物种类)
$Food = "Vegetable";
mysql_query("SELECT `" . $Food . " %` FROM `Foods`");
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
任何帮助,将不胜感激 :-)
编辑:显然我的例子并不清楚,但我已经知道所有专栏的第一句话.列始终相同,并且不会添加或删除任何"食物种类".PHP变量只用于确定我需要的几种类型中的哪一种.
Joe*_*lli 18
您必须动态构建SQL.作为一个起点,这将为您提供您正在寻找的列名称.
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Foods'
AND table_schema = 'YourDB'
AND column_name LIKE 'Vegetable%'
Run Code Online (Sandbox Code Playgroud)
没有办法完全按照你的想法去做.您可以先执行另一个查询来获取所有列名,然后在PHP中处理它们并构建第二个查询,但这可能比写出您想要的名称更复杂.
或者这个查询需要是动态的吗?桌子的结构会经常变化吗?
这是我用MySQL纯粹做的一种方式:
SET SESSION group_concat_max_len = 2048;
SELECT GROUP_CONCAT(CONCAT(" ",CAST(column_name as CHAR(50)))) FROM information_schema.columns WHERE table_name='real_big_table' AND column_name LIKE 'prefix%' INTO @sub;
SET @x = CONCAT("SELECT ",@sub," FROM my_db.real_big_table WHERE my_db.real_big_table.country_id='US'");
PREPARE stmt FROM @x;
EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)
我的答案受到这个答案的启发.
注意:我的'内部DBA'(以我肩膀上的小天使的形式)告诉我,需要这样做可能是DB结构不良的标志,但我的'内部黑客'(以小的形式)魔鬼在我的另一肩膀上说"只是完成它!"
| 归档时间: |
|
| 查看次数: |
53306 次 |
| 最近记录: |