Hola lambar:
Acláranos algunas cosas:
1. ¿Cuantas categorías existen en tu tabla? si hablas que tienes 10000 registros y esperas que te regrese 5000, podría suponer que tienes sólo dos categorías (lo cual no me parece correcto)... supongo que en realidad podrías tener n categorías, lo cual puede complicar la consulta.
2. ¿Todos los registros tienen todas las categorías?
3. ¿Necesitas forzosamente traer la categoría y su ID en columnas separadas?
Hay varias formas para hacer lo que quieres, aunque como te dije, la consulta se puede complicar dependiendo de lo que necesitas hacer... por un lado, podrías utilizar la función
GROUP_CONCAT, la cual te regresa una columna con la agrupación de los elementos que indiques, separados por comas... sería más o menos así:
Código MySQL:
Ver originalmysql
> SELECT products_model pmol
, products_image pimg
, -> products_price ppri, manufacturers_name maname, products_name pname,
-> categories_id cid, categories_name cname
+---------+------------+--------+--------+------------+------+---------+
| pmol | pimg | ppri | maname | pname | cid | cname |
+---------+------------+--------+--------+------------+------+---------+
| Auviart | img_si.gif | 2.9900 | Abba | Chiquitita | 36 | Pop |
| Auviart | img_si.gif | 2.9900 | Abba | Chiquitita | 41 | Espanol |
| otra | otra.gif | 2.9900 | Algo | Nada | 36 | Pop |
+---------+------------+--------+--------+------------+------+---------+
-> products_model pmol, products_image pimg,
-> products_price ppri, manufacturers_name maname, products_name pname,
-> products_id, products_model, products_image,
-> products_price, manufacturers_id, manufacturers_name, products_name;
+---------+------------+--------+--------+------------+-------------------+
| pmol | pimg | ppri | maname | pname | categorias |
+---------+------------+--------+--------+------------+-------------------+
| Auviart | img_si.gif | 2.9900 | Abba | Chiquitita | 36-Pop,41-Espanol |
| otra | otra.gif | 2.9900 | Algo | Nada | 36-Pop |
+---------+------------+--------+--------+------------+-------------------+
Observa que en la columna CATEGORIAS, concatené el id y el nombre de la categoría... en esta consulta NO IMPORTARÍA CUANTAS CATEGORÍAS TENGAS EN TU TABLA, la función concatenaría todas las que tengas.
Existe otra manera, pero esta es un poco más complicada, pues necesitas saber exactamente cuántas categorías tienes, sería así:
Código MySQL:
Ver original -> products_model pmol, products_image pimg,
-> products_price ppri, manufacturers_name maname, products_name pname,
-> MAX(IF(categories_name
= 'Pop', categories_name
, NULL)) cpop
, -> MAX(IF(categories_name
= 'Espanol', categories_name
, NULL)) cespanol
-> products_id, products_model, products_image,
-> products_price, manufacturers_id, manufacturers_name, products_name;
+---------+------------+--------+--------+------------+------+----------+
| pmol | pimg | ppri | maname | pname | cpop | cespanol |
+---------+------------+--------+--------+------------+------+----------+
| Auviart | img_si.gif | 2.9900 | Abba | Chiquitita | Pop | Espanol |
| otra
| otra.gif
| 2.9900 | Algo
| Nada
| Pop
| NULL | +---------+------------+--------+--------+------------+------+----------+
Aquí agregarías tantos MAX-IF como categorías tienes... y si quisieras también el ID, tendrías que agregar el respectivo MAX-IF para esos campos...
Hay una forma de hacer esto de manera automática, investiga un poco esta liga:
http://www.artfulsoftware.com/infotr...tip.php?id=523
Saludos
Leo.