【问题标题】:mysql - execute SELECT query only when TABLE EXISTmysql - 仅当 TABLE EXIST 时执行 SELECT 查询
【发布时间】:2013-03-25 20:32:51
【问题描述】:

我正在开发一个 Joomla 模块,其中可以显示图像并将其链接到 Joomla 文章、Virtuemart 产品或外部链接。

为了必须选择 Virtuemart 产品,我在模块清单 xml 中添加了以下参数:

<field 
                    name="image_1_product" 
                    type="sql" 
                    default="10"
                    query="SELECT #__virtuemart_products.virtuemart_product_id, #__virtuemart_products_en_gb.product_name
                        FROM #__virtuemart_products, #__virtuemart_products_en_gb
                        WHERE #__virtuemart_products.virtuemart_product_id = #__virtuemart_products_en_gb.virtuemart_product_id
                        AND #__virtuemart_products.published = 1"
                    key_field="virtuemart_product_id"
                    value_field="product_name"
                    label="LABEL_PRODUCT" 
                    description="DESC_PRODUCT">
                </field>

安装 Virtuemart 后,这一切正常。未安装 Virtuemart 时,您会收到“未知列”错误 - 这是有道理的。

因为这是一个模块清单选项,所以我只能使用 1 个查询。有没有办法在执行选择之前运行查询来检查表是否存在?喜欢:

IF EXISTS TABLE `table_a` (SELECT * FROM table_a)

如果是这样,它是否可以返回一行:

|编号 |价值 |

| 0 |未找到 Virtuemart |

谢谢!

【问题讨论】:

    标签: mysql joomla2.5 joomla-extensions


    【解决方案1】:

    恐怕仅使用单个数据库查询是不可能的。

    我能想到的唯一解决方法是为您的模块创建一个参数助手,并在您的模块fieldset 标记中使用addfieldpath。使用此解决方案,您可以编写一个方法来执行查询并创建输出,然后您可以在创建参数之前检查表是否存在。

    例如:

    <config>
        <fields name="params">
            <fieldset name="basic" addfieldpath="/modules/mod_mymodule/elements/">
                <field name="image_1_product" type="product" default="10" label="LABEL_PRODUCT" description="DESC_PRODUCT"/>
            </fieldset>
        </fields>
    </config>
    

    现在在 /modules/mod_mymodule/elements/ 创建一个名为 product.php 的 PHP 文件,并按照 Joomla 文档中的说明编写您的自定义查询和字段描述。

    Joomla 文档适用于 Custom parameter typesCreating custom template parameter types

    【讨论】:

      猜你喜欢
      • 2014-03-04
      • 2021-01-04
      • 2017-09-21
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2010-09-24
      • 2021-07-11
      相关资源
      最近更新 更多