[Phpmyadmin-devel] RFE #1491
Ashutosh Dhundhara
ashutoshdhundhara at yahoo.com
Mon Aug 4 01:06:38 CEST 2014
On Sat, Aug 2, 2014 at 2:45 AM, Marc Delisle <marc at infomarc.info> wrote:
> Le 2014-08-01 16:32, Ashutosh Dhundhara a écrit :
> > Hi all,
> >
> > I was looking into RFE #1491
> > <http://sourceforge.net/p/phpmyadmin/feature-requests/1491/> (Support
> > InnoDB for database Query by example). If I am not wrong, is the concept
> > of displaying the 'LEFT JOIN' is something like as discussed in the case
> > below:
> >
> > Lets say I have two tables:
> >
> > CREATE TABLE `product` (
> > `id` int(11) NOT NULL,
> > `price` decimal(10,0) DEFAULT NULL,
> > PRIMARY KEY (`id`)
> > )
> >
> > CREATE TABLE `product_order` (
> > `product_id` int(11) NOT NULL,
> > `customer_id` int(11) NOT NULL,
> > KEY `product_category` (`product_id`),
> > KEY `customer_id` (`customer_id`),
> > CONSTRAINT `product_order_ibfk_4` FOREIGN KEY (`product_id`) REFERENCES
> > `product` (`id`)
> > )
> >
> > Now in QBE interface, when I will select `product_order`.`product_id` in
> > first column drop-down and `product`.`id` in second column drop-down, I
> > should get the following result:
> >
> > FROM `db_name`.`product_order` LEFT JOIN `db_name`.`product`
> > ON `product_order`.`product_id` = `product`.`id`
> >
> > In general, 'LEFT JOIN' with foreign table and ON condition between
> > master column and foreign column. Am I getting it right?
>
> Hi Ashutosh,
>
> For the record, you are using the example given in [0].
>
> Note that to make a more complete example, you have to click
> the Show checkboxes for each selected column. Also, you would have to
> choose another column, for example the price. When the feature is
> implemented, as per your suggestion this would generate:
>
> select `product`.`price`, `product_order`.`product_id`, `product`.`id`
> FROM `product_order` LEFT JOIN `product` ON `product_order`.`product_id`
> = `product`.`id`
>
> Now, choosing which table is on which side of the LEFT JOIN is open to
> interpretation.
>
> The current QBE interface does not permit to specify which table
> you want on the left side and it's a shortcoming. It's not clear if
> the user wants to show all of the products, even those for which
> there are no order. If this is the case, it should become
>
> FROM `product` LEFT JOIN `product_order` ...
>
> I tend to think that this is what the user wants. So, this is the
> statement we should aim for:
>
> select `product`.`price`, `product_order`.`product_id`, `product`.`id`
> FROM `product` LEFT JOIN `product_order` ON `product_order`.`product_id`
> = `product`.`id`
>
> producing results such as:
>
> price product_id id
> 100 10 10
> 2000 20 20
> 3000 NULL 30
>
> where there is no order for product id 30.
>
> I'm not sure whether we should let the user decide which table should be
> on the left side. Things can become tricky in the UI when you add a
> third table like customer.
>
> [0] http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
>
>
Hi Marc,
In case of the complex example given in [0], if we select `product`.`id`,
`product`.`price` and `product_order`.`product_id` columns then should the
QBE interface generate the following SQL:
SELECT `product`.`id`, `product`.`price`, `product_order`.`product_id`
FROM `product`
LEFT JOIN `GSoC14`.`product_order` ON `product`.`category` =
`product_order`.`product_category` AND `product`.`id` =
`product_order`.`product_id`
Also, if we select `product`.`id`, `customer`.`id` and
`product_order`.`product_id` then what should be the output in case of 3
tables?
[0] http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
--
Ashutosh Dhundhara
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.phpmyadmin.net/pipermail/developers/attachments/20140804/3a68165c/attachment.html>
More information about the Developers
mailing list