ON clause with DataObject
| From: | Abbas Adel | Date: | Thu, 09 Feb 2006 00:14:50 +0000 |
| Subject: | ON clause with DataObject | ||
| Groups: | php.pear.general | ||
| Request: | Send a blank email to pear-general+get-22881@lists.php.net to get a copy of this message | ||
Dears,
I am using DataObject to join 2 tables; book, book_cat. Using self join with
the book_cat table.
The problem is in (ON) clause:
It shoud be
cat.id=subcat.parent_id
Instead of
cat.id=book_cat.parent_id
I don't know why book_cat.parent_id is copied exactly from links.ini without
change the table name?
The links.ini file contains:
--------------------------------------------------------
[book]
category = book_cat:id
[book_cat]
id = book_cat:parent_id
--------------------------------------------------------
Code:
-------------------------------------------------------
$cat = DB_DataObject::factory('book_cat');
$subcat = DB_DataObject::factory('book_cat');
$book = DB_DataObject::factory('book');
$subcat->joinAdd($cat, 'LEFT', 'cat');
$book->selectAs();
$book->joinAdd($subcat, 'INNER', 'subcat');
$book->selectAs($subcat, 'subcat_%s', 'subcat');
$book->selectAs($cat, 'cat_%s', 'cat');
-------------------------------------------------------
The result query:
-------------------------------------------------------
SELECT book.book_id as book_id , book.auther as auther , book.isbn as isbn ,
book.name as name , book.year as year , book.copy as copy , book.volume as
volume , book.category as category , subcat.id as subcat_id ,
subcat.parent_id as subcat_parent_id , subcat.name as subcat_name , cat.id
as cat_id , cat.parent_id as cat_parent_id , cat.name as cat_name FROM book
INNER JOIN book_cat AS subcat ON subcat.id=book.category LEFT JOIN book_cat
AS cat ON cat.id=book_cat.parent_id
-------------------------------------------------------
The on clause should be (ON cat.id = subcat.parent_id) in order to work
properly.
Thanks
BISO