0

我在 PHP 和 MySQL 工作

感觉要撞墙了 我不知道该怎么做,这让我很生气。我以前做过很多类似的事情,但这是行不通的。啊。请帮忙!!!!

我正在搜索。客户将输入“88 个刹车片”之类的内容。我想退回所有说“刹车”的部分,所有说“垫”的部分以及所有具有 88 年的部分。我的问题是,年份和部分在不同的表中。

例子:

年表

  ID  |  part_id  |  year  |
============================
   1  |    15     |  1945  |
   2  |    15     |  1946  |
   3  |    16     |  1984  |
   4  |    18     |  1987  |

零件表

  ID  |  part_name  |
=====================
  15  |    brakes   |
  16  |     hose    |
  17  |    crank    |
  18  |    muffler  |

当从零件表中拉出时,此 SQL 有效

SELECT DISTINCT * FROM hj_parts WHERE part_name LIKE "%brakes"

我会得到输出

  ID  |  part_name  |
=====================
   15  |    brakes   |

所以我需要的是,如果有人输入“刹车 87”,我想取回第 15 部分(刹车)和第 18 部分的所有信息(因为它是从 1987 年开始的)。

我完全迷失了。

我做了这样的事情来提取某一年的所有部分,我想我可以调整它,但它没有帮助。

$query = "SELECT hj_parts.* FROM hj_parts JOIN(SELECT DISTINCT part_id FROM hj_years WHERE (year BETWEEN $starter AND $ender) OR (year='all')) hj_years ON hj_parts.id = hj_years.part_id";
4

1 回答 1

1

这就是我的做法。首先创建一个将所有内容组合在一起的查询,为了方便起见,我们将把它放在一个视图中

create view AllParts as 
SELECT Parts.*,Years.* from Parts inner join Years on Years.part_id=Parts.ID

然后你做这样的搜索

Select * from AllParts where part_name like '%brake' or year=1987

如果您的数据库很大,这可能需要一段时间。它不一定是完美的解决方案,但它可以为您工作。

如果您有兴趣进行关键字搜索,也许 nosql 数据库会更好

于 2012-10-03T08:52:08.250 回答