Page 1 sur 1

deux tables, un array

Posté : 05 mai 2013, 13:51
par Stalker
Bonjour.

J'aimerais écrire une requête qui me donne les résultats classés dans un certain ordre, mais issus de deux tables différentes. Dans l'une j'ai des planètes, dans l'autres des disques de poussières, je veux les classer par ordre de distance par rapport au soleil (axis croissant).

Comment écrire cette requete? La deuxième table n'étant pas encore crée, comment dois-je la designer par rapport à la table des planètes pour simplifier la chose?

Merci d'avance.

Re: deux tables, un array

Posté : 05 mai 2013, 17:52
par moogli
salut,


Cela dépend de comment tu peux décrire tes élements.
si les planetes et disques ont des éléments similaire tu peux très bien utiliser la même table avec un champs 'type' qui indiquera s'il s'agit de l'un ou de l'autre

par exemple

create table typelement(
idtype int not null primary key,
nomtype varchar(50)
);

create table elements (
idelement int not null primary key,
idtype int null,
nom varchar(100) not null,
distance double
);
alter table elements add constraint fk_type foreign key(idtype) references typelement(idtype);
du coup la reque
ête est assez simple
select * from elements
join typelment using(idtype)
order by distance;-- ASC / DESC suivant ce qui t'intéresse

Dans tous les cas
il faut modéliser la bases avant de penser à l'affichage :)

Par exemple tu peux imaginer un système plus complexe avec une table element juste une clef primaire, un nom et un type.
Une table qui contient la descriptions des différentes caractéristique (taille, couleur, les choses aux quelles je ne songe pas).
une table qui va réunir les deux premières.
une table qui va contenir les distance entre les différents élements. (idelement 1, idelement 2, distance) du coup le select ressemble au mieux sauf que le tu ajoute un prédicat (where) sur l'un des elements == la clef primaire de la terre.
L'avantage de cette table (utilisable dans mon 1ère exemple) c'est que tu peux stocker les distances entres les élements quelqu'ils soient :)


@+

Re: deux tables, un array

Posté : 05 mai 2013, 20:11
par Stalker
Le truc c'est que les disques de débris et les planètes sont des objets très différents, alors j'aurais préféré faire deux tables. J'y avais pensé, mais justement j'aimerais l'éviter.

Il n'y a pas moyen de faire quelque chose comme ça?
SELECT (liste) FROM planetes AND disques 
WHERE star_name=nom_étoile
ORDER BY axis
J'avais essayé quelque chose de cette forme il y a quelques temps mais ça me donnait des erreurs ou des résultats vides.

Re: deux tables, un array

Posté : 05 mai 2013, 23:39
par moogli
si tu fait un select directement sur deux tables tu risque le produit cartésien et donc des données incohérentes.

Après tu peux tenter l'union entre deux requêtes avec une order by sur la distance


@+

Re: deux tables, un array

Posté : 07 mai 2013, 13:50
par Stalker
Bonjour.

Je viens d'essayer la méthode UNION qui m'avait l'air intéressante. Malheureusement ça ne marche pas. Voici ma requete:
$req_planet_gen="
				(SELECT name,type, sudarsky_class FROM  `exoplanets` WHERE star='".$star_name."' )
				UNION
				(SELECT name,type, sudarsky_class FROM  `discs` WHERE star='".$star_name."' )
				
				ORDER BY axis
				";