|
Почему ни один селект не отображается при вызове из процедуры?
#39091699
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Здравствуйте.
Есть процедура:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118.
DROP PROCEDURE IF EXISTS image_import;
DELIMITER //
CREATE PROCEDURE image_import(mode tinyint)
LANGUAGE SQL
SQL SECURITY DEFINER
BEGIN
DROP TEMPORARY TABLE IF EXISTS table_with_description;
CREATE TEMPORARY TABLE table_with_description
SELECT
pm.virtuemart_media_id
, m.file_url
, m.file_title
, m.file_meta
, IFNULL(p.product_sku, REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(m.file_url, '/',-1), '-',1), '.', 1), 'z', 'з')) AS sku
, pm.virtuemart_product_id
FROM ytgb1_virtuemart_product_medias pm
JOIN ytgb1_virtuemart_products p USING(virtuemart_product_id)
JOIN ytgb1_virtuemart_medias m USING(virtuemart_media_id)
WHERE
file_type = 'product'
AND pm.ordering = 1;
DROP TEMPORARY TABLE IF EXISTS new_medias;
CREATE TEMPORARY TABLE new_medias
SELECT
pru.product_name
, infa.virtuemart_product_id
, p.product_sku as trusted_sku
, x.*
, CONCAT(xx.file_meta, '. ', foto_id) as new_file_title
, CONCAT(xx.file_meta, '. ', foto_id) as new_file_meta
-- INTO OUTFILE 'possibly_recognized_images.text'
FROM (
SELECT
m.virtuemart_media_id
, m.file_url
, REPLACE(SUBSTRING_INDEX(SUBSTRING_INDEX(m.file_url, '/',-1), '-',1), 'z', 'з') recognized_sku
, CASE
WHEN m.file_url LIKE '%reel.jpg' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(m.file_url, '-',-2), '-',1)
WHEN m.file_url LIKE '%-__.jpg' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(m.file_url, '-',-1), '.',1)
END AS foto_id
FROM ytgb1_virtuemart_medias m
WHERE
-- m.file_url LIKE '%93460.jpg' AND
m.file_type = "product"
AND m.published = 1
AND NOT EXISTS( SELECT virtuemart_product_id FROM ytgb1_virtuemart_product_medias WHERE virtuemart_media_id = m.virtuemart_media_id)
AND (m.file_url LIKE '%reel.jpg' OR m.file_url LIKE '%-__.jpg')
)x
JOIN ( SELECT p.product_sku, COUNT(*) AS n FROM ytgb1_virtuemart_products p GROUP BY p.product_sku ) p
ON x.recognized_sku = p.product_sku AND p.n = 1
JOIN ytgb1_virtuemart_products infa ON infa.product_sku = p.product_sku
JOIN ytgb1_virtuemart_products_ru_ru pru ON pru.virtuemart_product_id = infa.virtuemart_product_id
-- таблица с базовым описанием товара
JOIN table_with_description xx ON xx.virtuemart_product_id = infa.virtuemart_product_id;
DROP TEMPORARY TABLE IF EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table
SELECT
recognized_sku
, COUNT(*) as cnt
FROM new_medias m
GROUP BY recognized_sku;
DROP TEMPORARY TABLE IF EXISTS table_for_insert;
CREATE TEMPORARY TABLE table_for_insert
SELECT
x.virtuemart_product_id
, m.virtuemart_media_id
, m.file_url
, m.recognized_sku
, min_order_number
, foto_id
, cnt.cnt
, min_order_number - cnt.cnt + (foto_id - 2) as ordering
FROM new_medias m
JOIN temp_table cnt ON cnt.recognized_sku = m.recognized_sku
JOIN (SELECT
m.virtuemart_product_id
, product_sku
-- , MAX(ordering) max_order_number
, MIN(ordering) min_order_number
FROM ytgb1_virtuemart_product_medias m
JOIN ytgb1_virtuemart_products p USING(virtuemart_product_id)
GROUP BY
m.virtuemart_product_id
, product_sku
)x ON m.recognized_sku = x.product_sku
-- отбираем только товары с уникальным sku
JOIN ( SELECT p.product_sku, COUNT(*) AS n FROM ytgb1_virtuemart_products p GROUP BY p.product_sku ) p
ON m.recognized_sku = p.product_sku AND p.n = 1;
IF mode = 0 THEN
SELECT * FROM new_medias ORDER BY file_url;
SELECT * FROM table_for_insert ORDER BY file_url;
SELECT 'Привет1!';
END IF;
IF mode = 1 THEN
SELECT 'Привет2!';
UPDATE ytgb1_virtuemart_medias m
JOIN new_medias x ON x.virtuemart_media_id = m.virtuemart_media_id
SET
m.file_title = x.new_file_title
, m.file_meta = x.new_file_meta
, m.file_description = '';
INSERT INTO ytgb1_virtuemart_product_medias(virtuemart_product_id, virtuemart_media_id, ordering)
SELECT virtuemart_product_id, virtuemart_media_id, ordering FROM table_for_insert;
END IF;
SELECT 'Привет3!';
END//
DELIMITER ;
При ее запуске в PHPMyadmin с помощью инструкции:
ни один из "Приветов" не выводится, выводится только сообщение "SQL-запрос был успешно выполнен ( Запрос занял 3.0367 сек. )"
Почему так?
Если тело процедуры заменить на один единственный селект вида SELECT 'Привет3!'; то Привет выводится. Объясните пожалуйста, что такое творится с отображением селектов
|
|
|