在列值表结构中搜索

时间:2013-06-27 09:36:24

标签: php mysql

我有一个看起来像这样的表结构:

table_items
+----+-------+
| id | title |
+----+-------+
|  1 | Hello |
+----+-------+

table_values
+----+----------+--------------+---------------------+
| id | items_id |   columnname |        value        |
+----+----------+--------------+---------------------+
|  1 |        1 |  description | This is the desc... |
+----+----------+--------------+---------------------+
|  1 |        1 |        hobby | My hobby is comp... |
+----+----------+--------------+---------------------+

我不想在每个值字段中搜索Hello项目和网站上的所有其他项目。这样做的最佳方式是什么?

4 个答案:

答案 0 :(得分:0)

您需要加入2个表格,将items_id中的table_valuesid表格中的table_items相关联(标题为Hello

SELECT table_values.*
FROM table_items, table_values
WHERE table_items.title='Hello'
AND table_items.id=table_values.items_id

我假设您只需要table_value信息(因为我们知道table_items.title是Hello,而table_items.id将与table_values.items_id相同)

答案 1 :(得分:0)

我找到了我的问题的解决方案,它是使用索引,当然还要加入表格。谢谢你的所有答案。

答案 2 :(得分:0)

您可以使用此SQL SELECT命令:

SELECT table_items.title, table_values.columnname, table_values.value FROM table_items
INNER JOIN table_values ON table_items.id = table_values.items_id
WHERE table_items.title LIKE '%Hello%'
UNION
SELECT table_items.title, table_values.columnname, table_values.value FROM table_items
INNER JOIN table_values ON table_items.id = table_values.items_id
WHERE table_values.columnname LIKE '%Hello%' || table_values.value LIKE '%Hello%';

和SQLFiddle:http://sqlfiddle.com/#!2/11539/4

答案 3 :(得分:-1)

使用INNER JOIN

SELECT table_values.*
FROM table_values
INNER JOIN table_items
ON table_items.title LIKE CONCAT(table_values.value, '%')