2017-09-14 106 views
1

我不知道如何提出問題。 這裏的例子:如何爲與其他字段名稱相同的字段創建別名?

category

id_category 
id_main_category 
title_category 

內容的是:

  • id_category :1 | id_main_category :0 | title_category : Man
  • id_category :2 | id_main_category :0 | title_category : Woman
  • id_category :3 | id_main_category :1 | title_category : Wallet
  • id_category :4 | id_main_category :1 | title_category : Shoe
  • id_category :5 | id_main_category :2 | title_category : Dress

id_main_category = id_category

與id_main_category = 0的每個字段是一個MainCategory,另一個是其它字段的在其id_main_category引用id_category一個子類別。

所以,曼(id_category 1)是MainCategory和它有2個子目錄:

  • 電子錢包(id_category 3)
  • 鞋(id_category 4)

我想選擇*從類別也maincategory的標題和打印爲:

  • 女人
  • 錢包(MAN)
  • 擦鞋(人)
  • 連衣裙(女)

的問題是:如何選擇和的title_category創建別名mainCategory,如: SELECT *, title_category as title_main_category FROM category WHERE id_main_category = id_category.

謝謝

回答

1

爲此,您需要一個JOIN,因爲您實際上將不同的行合併爲一個。這應該做的伎倆

SELECT * FROM `category` AS `a` 
LEFT JOIN `category` AS `b` 
ON `a`.`id_main_category` = `b`.`id_category` 

注意:您應該設置id_main_categoryNULL,如果它是一個「根」類別。 0是一個有效的ID,因此您不應該根據此任意值區分根/子。儘管如此,您可能必須將列更改爲允許空值。

+0

我插入另一場id_category = 0,並將其命名爲主要類別。 –

+0

啊。如果您實際上使用「主類別」作爲所有其他類別的類別,那完全沒問題。但是,如果你插入的只是爲了能夠選擇「根」類別,這是不好的做法,可能會導致你後來的問題。 – giorgio

1

這會給你你想要的確切結果。

SELECT CONCAT(a.title_category,'(',IFNULL(b.title_category,''),')') 
FROM category a LEFT JOIN category b ON a.id_main_category = b.id_category ; 

希望這對我有所幫助。我已經使用self join,b類在這裏就像父類別表一樣。

0

正如@giorgio所說。

SELECT *, a.`title_category` AS 'title_main_category' FROM 
`category` AS `a` 
LEFT JOIN `category` AS `b` 
ON `b`.`id_main_category` = `a`.`id_category` 

謝謝

相關問題