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   |

したがって、誰かが「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 に答える