Comment gérer plusieurs-à-plusieurs jointures dans SQL pour html5and programmation de CSS3

Les jointures internes sont un moyen idéal pour mettre en œuvre des relations one-to-many SQL pour HTML5 et CSS3 programmation. Si vous regardez diagrammes ER, vous voyez souvent plusieurs à de nombreuses relations, aussi. Bien sûr, vous avez aussi besoin de les modéliser. Voici le secret: Vous ne pouvez pas vraiment faire. Le modèle de données relationnel n'a pas vraiment une bonne façon de faire plusieurs-à-plusieurs jointures. Au lieu de cela, vous semblant. Il est pas difficile, mais il est un peu sournois.

Sommaire

Vous utilisez plusieurs-à-plusieurs jointures pour gérer les données cotées, telles que la relation entre le héros et le pouvoir. Chaque héros peut avoir un certain nombre de pouvoirs, et chaque pouvoir ne peut appartenir à un nombre de héros.

image0.jpg

La jointure interne a été facile parce que vous venez de mettre une référence de clé étrangère à l'un des côtés de la relation dans la table n. Dans un grand nombre à plusieurs rejoindre, il n'y a pas “ un ” côté, donc où vous mettez la référence ne? Laissez-les informaticiens à venir avec une solution sournoise.

Notez que ce tableau ne contient aucune référence à des pouvoirs. Vous voyez beaucoup de pouvoirs, mais aucune référence à des héros.

image1.jpg

Voici la partie la plus délicate.

image2.jpg

Les résultats de cette requête peuvent vous surprendre. La nouvelle table contient rien d'autre que des clés étrangères. Il ne fait pas beaucoup de sens en soi, mais il représente l'une des idées les plus importantes dans les données.

Comprendre les tableaux de liaisons

La hero_power table est une table de marque nouvelle, et il est certes un petit canard impair:

  • Il ne contient pas les données de son propre. Très peu apparaît à l'intérieur de la table.

  • Il ne porte pas sur une entité. La plupart des tables sont sur les entités à vos données. Ce ne l'est pas.




  • Il est d'une relation. Ce tableau est en fait sur les relations entre le héros et le pouvoir. Chaque entrée de cette table est un lien entre le héros et le pouvoir.

  • Il contient deux références de clé étrangère. Chaque enregistrement de cette table relie une entrée dans le héros table avec l'un dans le puissance table.

  • Il dispose d'une jointure plusieurs-à-un avec chacun des deux autres tables. Ce tableau a un-à-un nombre relation avec le héros table. Chaque enregistrement de hero_power se connecte à un record de héros. De même, chaque enregistrement de hero_power se connecte à un enregistrement de la puissance.

  • Le seul nombre à deux rejoint créer un many-to-many rejoindre. Voici la partie magique: En créant une table avec deux many-to-one des jointures, vous créez un many-to-many jointure entre les tables d'origine!

  • Ce type de structure est appelée table de liens. Tables de liaison sont utilisés pour créer de nombreux-à-plusieurs relations entre les entités.

Comment utiliser les tableaux de liaisons de faire plusieurs-à-plusieurs jointures

Voici un schéma complet ER des données de héros.

image3.jpg

Tables de liaison ne sont pas vraiment utiles sur leur propre parce qu'ils ne contiennent pas de données réelles. Généralement, vous utilisez une table de lien à l'intérieur d'une requête ou la vue:

SELECThero.name AS «héros», power.name AS 'power'FROMhero, puissance, hero_powerWHEREhero.heroID = hero_power.heroIDANDpower.powerID = hero_power.powerID-

Voici quelques réflexions sur ce type de requête:

  • Il combine trois tables. Cette complexité semble effrayant au début, mais il est vraiment très bien. Le point de cette requête est d'utiliser la hero_power table pour identifier les relations entre le héros et le pouvoir. On notera que le DE article répertorie tous les trois tableaux.

  • La clause a deux liens. La première partie de la clause relie la hero_power table avec la héros table avec une jointure interne. La seconde partie relie le puissance table avec une autre jointure interne.

  • Vous pouvez utiliser une autre clause de limiter davantage les résultats. Bien sûr, vous pouvez toujours ajouter d'autres parties à la ET clause de rendre les résultats de résoudre un problème particulier, mais laisser ce seul pour le moment.

Maintenant, vous avez des résultats que vous pouvez utiliser.

image4.jpg

Une fois de plus, cette requête est un endroit évident pour une vue:

CREATE VIEW heroPowerView ASSELECThero.name AS «héros», power.name AS 'power'FROMhero, puissance, hero_powerWHEREhero.heroID = hero_power.heroIDANDpower.powerID = hero_power.powerID-

Typiquement, vous ne ferez pas vos résultats exactement comme ce point de vue. Au lieu de cela, vous affichez des informations sur, disons, Boy binaire, et que vous souhaitez une liste de ses pouvoirs. Il ne faut pas dire Binary Boy trois fois, donc vous avez tendance à utiliser deux requêtes (tant du point de vue, si possible) afin de simplifier la tâche. Par exemple, regardez ces deux requêtes:

SELECT * FROM heroMissionView où le héros = 'puissance de boy'-SELECT binaires à partir heroPowerView où le héros =' boy'- binaire

La combinaison de ces requêtes vous donne suffisamment de données pour décrire tout dans la table d'origine. Typiquement, vous attachez toutes ces données ensemble dans votre code PHP.

Le code est l'accès aux données de PHP standard, sauf qu'il effectue deux passages à la base de données:

showDetails.php? lt; php // connecttry {$ con = new PDO ('mysql: host = localhost-dbname = Haio "," Haio "," Haio ") - $ con-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION ) - // obtenir plus d'informations pour la demande héros héros $ = "garçon binaire" - $ query = lt; lt;
query ($ query) - $ result-> setFetchMode (PDO :: FETCH_ASSOC) -foreach ($ result que $ row) {foreach ($ row que $ field => $ value) {print lt; lt;
champ de $
valeur de $
ICI-} // champ foreach fin} // fin rangée foreachprint "
pouvoirs
n "-PRINT"
n "- // créer une autre requête pour saisir la requête pouvoirs de $ = lt; lt;query ($ query) -print "
    n "-foreach ($ result que $ row) {foreach ($ row que $ field => $ value) {print"
  • valeur de $
  • n "-} // fin foreach} // fin tandis loopprint"
n "-PRINT"
n "-PRINT"
n "-} catch (PDOException $ e) {echo 'erreur:'. $ e-> getMessage () -} // end try>?

» » » » Comment gérer plusieurs-à-plusieurs jointures dans SQL pour html5and programmation de CSS3