1

MySQLテーブルを使用してWebサイトにブレッドクラムを追加しようとしていますが、現在問題が発生しています。

'includes'という名前のテーブルを作成しました。このテーブルには、ページのカテゴリ、ページ、サブページ、タイトル、および参照(url)に関する情報が格納されています。カテゴリ、ページ、およびサブページはすべて、ユーザーがいるページから渡されるphpパラメーターです。

私のテーブルは次のようにレイアウトされています。

|----------------------------------------------------------------|
| ID |  Category  |  Page   |  Subpage  |  Title           | Ref |
|----------------------------------------------------------------|
| 0  |            |         |           | Home             | ... |
| 1  | Software   |         |           | Software         | ... |
| 2  | Software   | Desktop |           | Desktop Software | ... |
| 3  | Software   | Mobile  |           | Mobile Software  | ... |
| 4  | Software   | Desktop | Blah      | Blah Blah        | ... |
| ...
|----------------------------------------------------------------|

私がやろうとしているのは、パンくずリストに必要なステップだけを家に戻すクエリを作成することです。

つまり、ユーザーが「example.com/software/desktop/blah」を使用している場合、クエリは行0、1、2、および4を返します。または、/ software / mobileを使用している場合は、行のみを返します。 0、1、および3。

私の現在の試みは次のようなものでした:

SELECT * FROM `includes` WHERE
`category` IS NULL     AND `page` IS NULL AND `subpage` IS NULL OR
`category`='$category' AND `page` IS NULL AND `subpage` IS NULL OR
`category`='$category' AND `page`='$page' AND `subpage` IS NULL OR
`category`='$category' AND `page`='$page' AND `subpage`='$subpage'

これは機能しないだけでなく、必要以上に複雑に見えます。

私はおそらくこれを複雑にしすぎているか、あるいはまったく間違った方法を実行している可能性があります。それが私がここに目を向けた理由です。

誰かがこれに対する可能な解決策を持っていますか?より複雑なクエリを検討する必要がありますか?(確かに、SQLは私の得意分野ではありません)または、新しいSQLテーブル、あるいはまったく異なるメソッドを検討する必要がありますか?

4

2 に答える 2

2

あなたが持っているのは階層構造です。データは親子関係で設定されます。階層データの操作方法に関する適切な説明がここにあります:http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/

于 2013-03-09T07:22:11.363 に答える
1

self relationこのようなテーブルを作ることができます

id | parent_it | title | Ref 

1  | 0         | Home  | ... 
2  | 1         | Software  | ... 
3  | 2         | Desktop  | ... 
4  | 2         | Mobile  | ... 
5  | 3         | Blah  | ... 

したがって、クエリは最後の要素を取得する必要がありますSELECT * FROM includesWHERE tilte='Blah'

次に、親IDのタイトルなどを取得します。このように、テーブル構造は私の観点と経験からより優れたものになります。

また

取得した値に基づいてクエリを生成します。単純なループで引数をカウントし、それに基づいてクエリ文字列を生成して実行します。

これがお役に立てば幸いです:)

于 2013-03-09T07:31:11.850 に答える