Beispiele für Viele-zu-viele-Beziehungen

Lesezeit: 3 Minuten

Beispiele fur Viele zu viele Beziehungen
guten Abend

Ich habe hier und in Google keine Beispiele für MYSQL-Viele-zu-viele-Beziehungen gefunden. Was ich suche, ist ein sehr einfaches Beispiel mit php+mysql, das die Ergebnisse der Datenbank zeigt. Kann jemand ein ganz einfaches Beispiel schreiben?

Beispielszenario: Studierende und Lehrveranstaltungen an einer Hochschule. Ein bestimmter Student kann an mehreren Kursen teilnehmen, und natürlich hat ein Kurs normalerweise viele Studenten.

Beispieltabellen, einfaches Design:

CREATE TABLE `Student` (
    `StudentID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
    `FirstName` VARCHAR(25),
    `LastName` VARCHAR(25) NOT NULL,
    PRIMARY KEY (`StudentID`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci

CREATE TABLE `Course` (
    `CourseID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `Code` VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL,
    `Name` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`CourseID`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci

CREATE TABLE `CourseMembership` (
    `Student` INT UNSIGNED NOT NULL,
    `Course` SMALLINT UNSIGNED NOT NULL,
    PRIMARY KEY (`Student`, `Course`),
    CONSTRAINT `Constr_CourseMembership_Student_fk`
        FOREIGN KEY `Student_fk` (`Student`) REFERENCES `Student` (`StudentID`)
        ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `Constr_CourseMembership_Course_fk`
        FOREIGN KEY `Course_fk` (`Course`) REFERENCES `Course` (`CourseID`)
        ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci

Finden Sie alle für eine Lehrveranstaltung eingeschriebenen Studierenden:

SELECT
    `Student`.*
FROM
    `Student`
    JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student`
WHERE
    `CourseMembership`.`Course` = 1234

Finden Sie alle Kurse, die von einem bestimmten Studenten belegt wurden:

SELECT
    `Course`.*
FROM
    `Course`
    JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course`
WHERE
    `CourseMembership`.`Student` = 5678

  • Warum hat die CourseMembership-Tabelle ASCII-Zeichensatz?

    – John

    1. Februar 2019 um 17:58 Uhr

  • Können Sie bitte hinzufügen, wie Daten richtig eingefügt werden? In welcher Reihenfolge usw.

    – Chill Appreciator

    11. Januar 2020 um 2:28 Uhr

  • Gibt es eine Möglichkeit, den Datensatz in diesem Fall zu aktualisieren? Was ich jetzt tue, ist, den vorhandenen Datensatz zu löschen und im Aktualisierungsfall einen neuen hinzuzufügen? Wie kann ich überprüfen, welcher Datensatz aktualisiert werden soll?

    – Tayyab Hayat

    23. September 2021 um 9:55 Uhr

Hier ist ein schnelles und schmutziges Beispiel für das beteiligte SQL. Ich sehe keine Notwendigkeit, das Konzept mit PHP zu verwirren. Rufen Sie das Set einfach wie jedes andere ab.

In diesem Beispiel gibt es viele Namen und viele Farben. Menschen dürfen mehr als eine Lieblingsfarbe haben, und viele Menschen können dieselbe Lieblingsfarbe haben. Also viele zu viele.


***** Tables **********

person
--------
id - int 
name - varchar

favColor
-------------
id - int 
color - varchar

person_color
------------
person_id - int (matches an id from person)
color_id - int (matches an id from favColor)



****** Sample Query ******

SELECT name, color 
FROM person 
    LEFT JOIN person_color ON (person.id=person_id)
    LEFT JOIN favColor ON (favColor.id=color_id)


****** Results From Sample Query *******

Name - Color
---------------
John - Blue
John - Red
Mary - Yellow
Timmy - Yellow
Suzie - Green
Suzie - Blue
etc...

Hilft das?

1646903046 315 Beispiele fur Viele zu viele Beziehungen
zloctb

mysql> SELECT * FROm products;
+----+-----------+------------+
| id | name      | company_id |
+----+-----------+------------+
|  1 | grechka   |          1 |
|  2 | rus       |          1 |
|  3 | makaronu  |          2 |
|  4 | yachna    |          3 |
|  5 | svuniacha |          3 |
|  6 | manka     |          4 |
+----+-----------+------------+
6 rows in set (0.00 sec)

mysql> SELECT * FROm company;
+----+----------+
| id | name     |
+----+----------+
|  1 | LVIV     |
|  2 | KIEV     |
|  3 | KHarkiv  |
|  4 | MADRID   |
|  5 | MILAN   |
|  6 | KOR |
+----+----------+
6 rows in set (0.00 sec)

mysql> SELECT * FROm many_many;
+------------+---------+
| product_id | city_id |
+------------+---------+
|          1 |       1 |
|          1 |       3 |
|          2 |       3 |
|          1 |       2 |
|          1 |       4 |
|          2 |       4 |
|          2 |       1 |
|          3 |       1 |
+------------+---------+
8 rows in set (0.00 sec)

mysql> SELECT products.name,company.name FROM products JOIN many_many ON many_
ny.product_id =products.id JOIN company ON company.id= many_many.city_id;
+----------+---------+
| name     | name    |
+----------+---------+
| grechka  | LVIV    |
| grechka  | KHarkiv |
| grechka  | KIEV    |
| grechka  | MADRID  |
| rus      | KHarkiv |
| rus      | MADRID  |
| rus      | LVIV    |
| makaronu | LVIV    |
+----------+---------+
8 rows in set (0.00 sec)

  • Wie für die Grechka, bro(tan)

    – Chill Appreciator

    11. Januar 2020 um 2:06 Uhr

  • Das habe ich gesucht, danke für das grafische Beispiel

    – Ivandez

    19. März 2021 um 14:20 Uhr

1646903046 666 Beispiele fur Viele zu viele Beziehungen
RuchiS

SELECT a.a_id, b.b_id, b.b_desc,  
CASE WHEN x.b_id IS NULL THEN 'F' ELSE 'T' END AS selected 
FROM a 
CROSS JOIN b 
LEFT JOIN x ON (x.a_id = a.a_id AND x.b_id = b.b_id) 
WHERE (a.a_id = 'whatever')

987240cookie-checkBeispiele für Viele-zu-viele-Beziehungen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy