2012-04-09 16 views
1

私はbook_listbook_categoryの2つのテーブル名を持っています。スキーマは以下のようである:book_listにPHP MYSQLの再帰的my book_categoryを結合します

book_list

+---------+--------+-----------+ 
| id_book | id_cat | book_name |  
+---------+--------+-----------+  
| 1  | 3 | Book Nam1 | 
| 2  | 1 | Book Nam2 | 
| 3  | 2 | Book Nam3 | 
+---------+--------+-----------+ 

book_category

+--------+----------+-----------+-------+ 
| id_cat | cat_name | id_parent | level | 
+--------+----------+-----------+-------+ 
| 1 | name1 |  0  | 1 | 
| 2 | name1.1 |  1  | 2 | 
| 3 |name1.1.1 |  2  | 3 | 
+--------+----------+-----------+-------+ 

コードを試みた:

SELECT a.id_book, a.id_cat, a.book_name, b.cat_name, b.level 
FROM book_list a 
INNER JOIN book_category b ON a.id_cat = b.id_cat 

Iはどこブレッドクラムを追加するために、結果の配列を操作するために必要それぞれは以下のような自分自身へのリンクを持っています:

table row: 
<td>3(id_book)</td> 
<td>Book Nam3 (book_name)</td> 
<td> 
    <a href="handle.php?id=<?=id_cat;?>">Name 1</a> » 
    <a href="handle.php?id=<?=id_cat;?>">Name 1.1</a> » 
    <a href="handle.php?id=<?=id_cat;?>">Name 1.1.1</a> 
</td> 

希望私は何かを助けてくれてありがとう。

+0

あなたの質問をチェックしてください.2回a.id_bookを選択していますが、それがない場合は、最初に修正してください。 –

+1

@Jason_vorhess、そうです。 SQLは修正されました。 –

答えて

0

この文字列で検索してください。

SELECT 
    bl.id_book, bl.id_cat, bl.book_name, tc2.cat_name, tc2.level 
FROM 
    book_list bl 
JOIN book_category tc 
    ON tc.id_cat = bl.id_cat 
JOIN book_category tc2 
    ON LOCATE(tc2.cat_name, tc.cat_name) > 0 
WHERE 
    tc.id_cat = 3 

このクエリは、サブストリングcat_nameの出現に基づいています。

0

TRY

SELECT a.id_book, a.id_cat, a.book_name , b.cat_name, b.level 
FROM book_list a 
JOIN book_category b ON USING(id_cat) 

、その後

<a href="handle.php?id=<?=$id_cat;?>"><?=$cat_name?></a>