2012-04-12 16 views
3

Ich habe nichts darüber gefunden.mysql: alle Felder eines Joins umbenennen

Hier ist meine Frage:

SELECT p.*, pa.*, a.* 
FROM produit p 
LEFT OUTER JOIN produit_attribut pa 
ON p.id=pa.id_produit 
LEFT OUTER JOIN attribut a 
ON a.id=pa.id_attribut 
ORDER BY p.id,a.id; 

Aber das Problem ist, dass es Spalten zurückgeben

with the same name: 

+----+------------+-----+------------+-------------+------+-----+----+----+ 
| id | titre  | desc| id_produit | id_attribut | id | desc| val| abb| 
+----+------------+-----+------------+-------------+------+-----+----+----+ 
| 1 | Anchois | Sauc|   1 |   1 | 1 | Nomb| 2 | Nb | 
| 2 | Fromage | Sauc|   2 |   1 | 1 | Nomb| 2 | Nb | 
| 3 | Mozzarella | Sauc|   3 |   1 | 1 | Nomb| 2 | Nb | 
| 4 | Jambon  | Sauc|   4 |   1 | 1 | Nomb| 2 | Nb | 
| 5 | Roquefort | Sauc|   5 |   1 | 1 | Nomb| 2 | Nb | 
| 6 | Royale  | Sauc|   6 |   1 | 1 | Nomb| 2 | Nb | 

Ich mag gerne wissen, ob es eine Möglichkeit gibt, alle Felder einer Tabelle umbenennen, dass etwas aussehen könnte (ich weiß, das folgende sQL nicht funktioniert):

SELECT p.* as p*, pa.* as pa*, a.* as att* 
FROM produit p 
LEFT OUTER JOIN produit_attribut pa 
ON p.id=pa.id_produit 
LEFT OUTER JOIN attribut a 
ON a.id=pa.id_attribut 
ORDER BY p.id,a.id; 

Durch die Art, wie ich weiß, dass ich tun kann, so wie:

SELECT 
    p.id AS p_id, 
    p.titre AS p_titre, 
    p.description AS p_description, 
    p.prix AS p_prix, 
    p.text_detail AS p_text_detail, 
    p.img_petite AS p_img_petite, 
    p.img_grande AS p_img_grande, 
    pa.id_produit AS pa_id_produit, 
    pa.id_attribut AS pa_id_attribut, 
    a.id AS a_id, 
    a.description AS a_description, 
    a.valeur AS a_valeur, 
    a.abbreviation AS a_abbreviation 
FROM produit p 
LEFT OUTER JOIN produit_attribut pa 
ON p.id=pa.id_produit 
LEFT OUTER JOIN attribut a 
ON a.id=pa.id_attribut 
ORDER BY p_id,a_id; 

Aber ich möchte das vermeiden.

Ich möchte die Anfrage generisch sein, weil ich diese Anfrage in PHP verwenden werde und es geht um eine generische CRUD-Komponente (und geschachtelte Tabelle).

Gibt es einen Weg?

+1

Nein - da ist nicht - der Alias ​​wird pro Spalte gemacht – ManseUK

+2

Glaube nicht, dass es einen Weg gibt, das zu tun. In jedem Fall ist es am besten, explizite Angaben zu den ausgewählten Spalten zu machen, anstatt '*' zu verwenden, da Sie die Spaltenreihenfolge deterministisch bestimmen und Probleme vermeiden können, wenn später ein großer Binärcode hinzugefügt wird –

+0

Ändern Sie Ihre Spalte Namen in Ihrem Schema! : p –

Antwort

5

Nein, es gibt keine Möglichkeit, das zu tun. Sie sollten jedoch versuchen, die Verwendung von * zur Auswahl von Spalten zu vermeiden. Mit diesem Refactoring werden Sie also sowohl * als auch Aliase für alle Spalten entfernen, die Sie zu zwei hinzufügen müssen. Zwei Fliegen mit einer Klappe! ;)

+0

Ich möchte die Anfrage generisch sein, weil ich dies in PHP verwenden werde und es geht um eine generische CRUD-Komponente. –