No he encontrado ejemplos de relaciones MYSQL de muchos a muchos aquí y en google. Lo que estoy buscando es ver un ejemplo muy simple con php + mysql mostrando los resultados de la base de datos. ¿Alguien puede escribir un ejemplo muy simple?Ejemplos de relaciones de muchos a muchos
Respuesta
Escenario de ejemplo: estudiantes y cursos en una universidad. Un estudiante determinado puede estar en varios cursos y, naturalmente, un curso generalmente tendrá muchos estudiantes.
mesas ejemplo, el diseño simple:
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
Encontrar todos los estudiantes inscritos en un curso:
SELECT
`Student`.*
FROM
`Student`
JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student`
WHERE
`CourseMembership`.`Course` = 1234
Encuentra todos los cursos tomados por un estudiante determinado:
SELECT
`Course`.*
FROM
`Course`
JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course`
WHERE
`CourseMembership`.`Student` = 5678
Aquí hay una ejemplo rápido y sucio del SQL involucrado. No veo ninguna necesidad de enturbiar el concepto con php. Simplemente recupere el conjunto como lo haría con cualquier otro.
En este ejemplo, hay muchos nombres y muchos colores. Las personas pueden tener más de un color favorito y muchas personas pueden tener el mismo color favorito. De ahí muchos a muchos.
***** 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...
¿Eso ayuda?
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')
Por favor, dar una explicación con su respuesta –
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 | MaLIN |
| 6 | KOROSTEN |
+----+----------+
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)
- 1. Yii marco de relaciones muchos a muchos
- 2. relaciones muchos a muchos en JSON
- 3. Atributos en relaciones Muchos a Muchos (Hibernar)
- 4. Relaciones Muchos a Muchos en MySQL
- 5. Relaciones muchos a muchos con ServiceStack.OrmLite
- 6. Relaciones genéricas de muchos a
- 7. Alternativas a las relaciones de muchos a muchos con CQRS
- 8. django-tastypie y muchos a muchos "a través de" relaciones
- 9. Relaciones de muchos a muchos de LINQ: ¿Solución?
- 10. cómo tener relaciones de muchos a muchos en redis
- 11. Ejemplos de consultas en una relación muchos a muchos
- 12. Tabla de asignación de muchos a muchos
- 13. Relaciones uno a muchos en (PostgreSQL) SQL
- 14. Cómo contar relaciones uno a muchos
- 15. cómo representar simétrica de muchos a muchos
- 16. muchos-a-muchos y muchos-a-muchos intersecciones
- 17. Linq a Sql - Muchos a muchos - CRUD
- 18. Relación de muchos a muchos
- 19. Diferencia entre uno-a-muchos, muchos-a-uno y muchos-a-muchos?
- 20. Relación Muchos a Muchos
- 21. ¿Cómo crear relaciones "a dos lados" de muchos a muchos en Rails?
- 22. ¿Cómo diseñar relaciones de muchos a muchos en una base de datos de objetos?
- 23. Django: accediendo a muchos a muchos objetos a través de otra relación Muchos a Muchos
- 24. django 1.4 Muchos a muchos agregar bulk
- 25. Cómo modelar las relaciones de muchos a muchos en MongoDB (para un usuario de MySQL)
- 26. Relaciones de muchos a muchos en Entity Framework donde join table tiene más de dos campos?
- 27. ¿Cuál es la mejor manera de implementar relaciones de muchos a muchos usando ORMLite?
- 28. NHibernate: Relación de muchos a muchos con el campo en la tabla de relaciones
- 29. únicos valores de campo y las relaciones de muchos a muchos
- 30. Modelado de muchos a muchos con datos de relaciones en Google App Engine
ver esto: http://www.tonymarston.net/php-mysql/many-to-many.html – nc3b