Let's say I have two tables, and both their primary identifiers use the name 'id'. If I want to perform a join with these two tables, how would I alias the id
of the table that I want to join with the former table?
For example:
SELECT * FROM `sites_indexed` LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` WHERE `url` LIKE :url
Now, site_id is supposed to link up with sites_indexed.id
. The actual id
which represents the row for individual_data
however has the same title as sites_indexed
.
Personally, I like to just use the name id
for everything, as it keeps things consistent. When scripting server-side however, it can make things confusing.
e.g.
$var = $result['id'];
Given the aforementioned query, wouldn't this confuse the interpreter?
Anyway, how is this accomplished?
Using this expression you will get results with columns id (from table sites_indexed) and id2 (alias for column id from table individual_data)
The problem is that you're using the * wildcard. If you explicitly list the column names in your query, you can give them aliases:
Then you can reference them via the alias:
$var = $result['sites_indexed_id']; $var_b = $result['individual_data_id'];
Instead of selecting all fields with "SELECT *" you should explicitly name each field you need, aliasing them with AS as required. For example:
And then you can reference the aliased names in your result set.
This thread is old and i found because i had the same problem. Now i have a better solution. The answer given by Paul McNett and antun forces you to list all fields but in some cases this is impossible (too much fields to list), so you can keep the * and alias only the fields you want (typically the fields that have the same name and will override each other).
Here's how :
you can add as much aliases as you want by adding comas.