Hello,
Je travaille sur 3 tables : item, contact_item_link et contact.
Voici leur description simpilifiée .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-----------------------------------
CREATE TABLE  `item` (
  `item_id` int(10) unsigned NOT NULL auto_increment,
  `item_name` varchar(255) NOT NULL,
  PRIMARY KEY  (`item_id`),
);
-----------------------------------
CREATE TABLE  `contact_item_link` (
  `contact_item_link_id` int(10) unsigned NOT NULL auto_increment,
  `coitlnk_contact_fk` int(10) unsigned NOT NULL,
  `coitlnk_item_fk` int(10) unsigned NOT NULL,
  `coitlnk_is_manuf` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`contact_item_link_id`),
  CONSTRAINT `fk_contact_item_link_contact` FOREIGN KEY (`coitlnk_contact_fk`) REFERENCES `contact` (`contact_id`),
  CONSTRAINT `fk_contact_item_link_item` FOREIGN KEY (`coitlnk_item_fk`) REFERENCES `item` (`item_id`)
);
-----------------------------------
CREATE TABLE  `contact` (
  `contact_id` int(10) unsigned NOT NULL auto_increment,
  `cont_name` varchar(100) NOT NULL,
  PRIMARY KEY  (`contact_id`)
)
-----------------------------------
Dans mon application, je possède une grille sur les "item" et désirerais afficher le nom d'un fabriquant de cet article (n'importe lequel). Le fabriquant d'un article est trouvé grâce au champ "coitlnk_is_manuf" qui vaut "true".
Ma requête actulle fonctionne très bien si un seul "contact_item_link" lié à mon article possède ce champ à "true". Si par exemple il en existe 2, mon article apparaîtra 2 fois dans ma grille = normal ==> mais comment faire pour n'afficher qu'un seul "item" avec le premier fabriquant trouvé.

Voici ma requête actuelle :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
-----------------------------------
SELECT
       cont_manuf.cont_name as 'calc_manuf',
       item.*
  FROM pxyeasygest_prod.item
  left outer join pxyeasygest_prod.contact_item_link coitlnk_supp
    on ((coitlnk_supp.coitlnk_item_fk = item_id) and (coitlnk_supp.coitlnk_is_default is true))
  left outer join pxyeasygest_prod.contact_item_link coitlnk_manuf
    on ((coitlnk_manuf.coitlnk_item_fk = item_id) and (coitlnk_manuf.coitlnk_is_manuf is true))
  left outer join pxyeasygest_prod.contact cont_manuf
    on (cont_manuf.contact_id = coitlnk_manuf.coitlnk_contact_fk)
  where (item_id = 3);
-----------------------------------
Est-il possible de "jouer" avec "LIMIT" sur les "JOIN" ? Je n'ai pas réussi ?

Merci d'avance.