开发者

Joining two tables in MySQL

Here are my two tables. I'm not sure they're normalized correctly:

all_configurator_lasers_power:

laser_id | power_id | laser_configuration
=========================================
    1       10         1
    1       25         1
    1       20         2
    1       50         2
    2       10         1 ...

all_configurator_power_text:

power_id | power_level | laser_configuration | power_text
========================================================= 
   10        10 watts        1                  10 watt text
   25        25 watts        1                  25 watt text
   20        20 wat开发者_开发技巧ts        2                  20 watt text
   50        50 watts        2                  50 watt text

What I want back is the first two rows of the second table if I provide the laser_id in the first table.

This is what I tried (but didn't work)

'SELECT * FROM all_configurator_power_text 
 INNER JOIN all_configurator_power_text 
 ON all_configurator_lasers_power.laser_configuration = all_configurator_power_text.laser_configuration'

This returns an array like this:

Array (
[0] => stdClass Object
        (
            [id] => 1
            [language] => en
            [power_id] => 10
            [power_level] => 10 watts
            [laser_configuration] => 1
            [power_text] => 10 watt text
            [laser_id] => 1
        )
...)

But the array (a CodeIgniter object) also returns objects with a laser_configuration of 2. I want just the ones with a 1. I added a WHERE clause of WHERE laser_configuration = 1 but then I get a non-object error.

What am I doing wrong?


You need to specify which table's laser_configuration you are using in your WHERE clause. Do that and it should work with the clause you wrote.

So you'd end up with something like:

 SELECT * FROM all_configurator_power_text
 INNER JOIN all_configurator_lasers_power 
 ON all_configurator_lasers_power.laser_configuration = all_configurator_power_text.laser_configuration
 WHERE all_configurator_lasers_power.laser_configuration = 1

Also, I recommend adding some shorthand references to make that more readable. It could play a big part in keeping yourself sane over the years:

 SELECT * FROM all_configurator_power_text text
 INNER JOIN all_configurator_lasers_power lasers
 ON lasers.laser_configuration = text.laser_configuration
 WHERE lasers.laser_configuration = 1


Try adding the following:

WHERE all_configurator_lasers_power.power_id = 1


There are some potential issues with your table structure but without knowing more about your specific requirements it is hard to tell. For instance you have have power_id and laser_configuration in each table.

The probable issue with your where clause is that you need to specify which of the two table's laser_configuration you are using. ie:

WHERE all_configurator_lasers_power.power_id = 1


SELECT *
FROM all_configurator_lasers_power
INNER JOIN all_configurator_power_text
ON all_configurator_lasers_power.laser_id = all_configurator_power_text.laser_configuration
WHERE all_configurator_lasers_power.laser_id = $id (in your case 1)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜