Hoe ouder naam in php mysql te krijgen?

Ik heb een tafel:

brand(id, parent_id, name)
       1      0      Apple 
       2      1      Macbook Air
       3      1      Iphone 4S
imgae(id, brand_id, image)
       1      2      mac.png
       2      3      iphone.png

En mysql:

SELECT br.name, img.image FROM image as img
LEFT JOIN brand AS br ON br.parent_id = img.brand_id

En het resultaat is:

Macbook Air |   mac.png
Iphone 4S   |   iphone.png

Hoe u de bovenliggende naam van het tafelmerk krijgt

Macbook Air |   mac.png     | Apple
Iphone 4S   |   iphone.png  | Apple 
0

2 antwoord

SELECT brand.id, brand.name, brandName.name as parentName, images.image FROM brand 
INNER JOIN brand as brandName ON brand.parent_id=brandName.id 
LEFT JOIN images ON brand.id=images.brand_id

ik veranderde LINKER JOIN in INNER JOIN

controleer alstublieft nog een keer.

3
toegevoegd

Ik probeer geen zelfreferentietabel te gebruiken als u problemen zoals deze krijgt. Kijk nog eens goed naar je database-/tafelontwerp.

Manufacture(
 ID
,Name)

Image(
 ID
,Blob
,URL)

Product(
 ID
,ImageID
,ManID
,Name
,Description
)

SQL

Select 
     M.Name as Brand
    ,P.Name as Product
    ,I.URL as ImageURL
FROM 
    Product AS P
JOIN Manufacture AS M ON
    P.ManID = M.ID
LEFT JOIN Image AS I ON
    P.ImageID = I.ID`

hoop dat het helpt.

PS. I would also recommend breaking your tables up from a management point of view. Say you wish to remove all Apple products, you can remove Apple from Manufacture table (by setting a column IsActive to 0, and updating you SQL to select only rows WHERE M.IsActive = 1 ) removing Apple and all products linked via ManID.

2
toegevoegd