2010-04-04 5 views
1
INSERT INTO item_quotation 
(item_id, quotation_id,name_searched,item_name,other_name,selling_price,discounted_price) 
SELECT DISTINCT I.item_id," . $quotation_id . ",T.item_name, I.name,I.other_name, INV.selling_price, I.discounted_price 
FROM temp_quotations T, item I, inventory INV<br/> 
WHERE (I.name LIKE CONCAT( '%', T.item_name, '%') 
OR I.other_name LIKE CONCAT( '%', T.item_name, '%')) 
AND INV.item_id = I.item_id; 

j'ai une table appelée temp_quotations (temp_item_id, item_name) ayant des valeurs
(1, moulin), (2, foret), (3, kit)
j'ai une autre table appelée article (item_id, name, other_name, discounted_price) ayant des valeurs
(1, meuleuse A, 100), (2, kit A, 200)
Lorsque j'exécute ce sql, j'insère des valeurs dans la table item_quotation (item_id, quotation_id, name_searched , item_name, other_name, selling_price, discounted_price) par exemple dans ce cas il va insérer
(1,1, broyeur, broyeur A, 150,100)
(2,1, kit, kit A, 250,200)
Étant donné que l'élément drill n'est pas trouvé dans l'élément de table, il ne sera pas affiché dans la table item_quotations. Je veux écrire une instruction if dans ce sql de sorte que lorsque le nom de l'élément de temp_quotation ne corresponde pas au nom de l'élément, il est introuvable à la place de item_name. C'est ce que je l'ai essayé, mais il n'affiche « introuvable »:IF expression dans SQL

INSERT INTO item_quotation 
(item_id, quotation_id,name_searched,item_name,other_name,selling_price,discounted_price) 
SELECT DISTINCT I.item_id," . $quotation_id . ",T.item_name, 
IF(I.name LIKE CONCAT( '%', T.item_name, '%'),I.name,'not found'),I.other_name, INV.selling_price, I.discounted_price 
FROM temp_quotations T, item I, inventory INV 
WHERE (I.name LIKE CONCAT( '%', T.item_name, '%') 
OR I.other_name LIKE CONCAT( '%', T.item_name, '%')) 
AND INV.item_id = I.item_id; 

Répondre

0

Eh bien, vous pouvez créer fonction ou la procédure pour mysql Syntaxe doit aller quelque chose comme ceci:

CREATE PROCEDURE insert_item(IN ITEM STRING) 
BEGIN 
SELECT item_id FROM quotation WHERE item=ITEM 
IF (item_id > 0) 
    THEN INSERT INTO.... 
    ELSE RETURN FALSE 
END IF; 
END| 

Ceci est juste exemple , pour plus d'informations, vérifier

http://www.databasejournal.com/features/mysql/article.php/3547931/MySQL-Stored-Procedures-Part-2.htm

+0

J'avais des problèmes pour exécuter des procédures dans le passé ... Je n'ai pas pu résoudre le problème. Y a-t-il une alternative aux procédures? – chupinette

+0

Il existe des alternatives, mais le meilleur moyen est de le résoudre avec des fonctions ... – confiq

+0

Pourriez-vous me dire quelles sont les alternatives? – chupinette