mysql - 仅在TABLE EXIST时执行SELECT查询

时间:2013-04-03 23:09:34

标签: mysql joomla2.5 joomla-extensions

我正在使用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个查询。有没有办法在执行select之前运行查询表是否存在的查询?像:

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

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

| id |值|

| 0 |未找到Virtuemart |

谢谢!

1 个答案:

答案 0 :(得分:0)

我担心只用一次数据库查询就不可能。

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

例如:

<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