我已经检查了每个表的排序规则类型,并且它们具有相同的排序规则。
错误:#1271 - 非法混合操作的排序' UNION'
请参阅以下查询:
$query = "(SELECT id, product_name, description, 'tbl_landt' as type FROM tbl_landt WHERE product_name LIKE '%" .
$keyword . "%' OR description LIKE '%" . $keyword ."%')
UNION
(SELECT id, name, null, 'tbl_land_cat' as type FROM tbl_land_cat WHERE name LIKE '%" . $keyword . "%')
UNION
(SELECT tbl_sub_cat.id, tbl_sub_cat.name AS cat_name, null, 'tbl_sub_cat' as type FROM tbl_sub_cat WHERE name LIKE '%" . $keyword . "%')
UNION
(SELECT id, name, null, 'tbl_exl_cat' as type FROM tbl_exl_cat WHERE name LIKE '%" . $keyword . "%')";
$squery = mysql_query($query);
答案 0 :(得分:5)
要解决此问题,您可能需要使用表达式替换SELECT列表中的一些列引用(在一个或多个查询中),例如 CONVERT(name USING utf8) AS name
。
最可能的问题是查询返回具有不同字符集的列。 (错误消息标识出有问题的UNION操作,而不是其他比较谓词(WHERE子句中的字符比较,也可能发生此类错误。)
要对此进行调试,您需要检查每个查询中返回的表达式的字符集,并进行比较。要缩小范围,您可以尝试将查询的子集测试为...
(query1) UNION (query2)
(query1) UNION (query3)
(query1) UNION (query4)
这应该缩小导致问题的组合范围。
然后检查要返回的字符类型列的字符集,作为表/列定义的一部分包含在内。
<强>参考文献:强>
MySQL CONVERT
函数引用:
http://dev.mysql.com/doc/refman/5.6/en/charset-convert.html
显示MySQL中可用的字符集(和排序规则):
SHOW COLLATION
检查查询中引用的列的字符集......
SHOW CREATE TABLE tbl_landt
SHOW CREATE TABLE tbl_land_cat
etc.
另外,请参阅StackOverflow中的这个(旧)问题,以获得有关MySQL中字符串强制性的更详细讨论......
答案 1 :(得分:0)
我能够在
失败的CREATE VIEW查询中修复此错误CAST( COALESCE( <TIMESTAMP> , <DATETIME> ) AS DATETIME
建议here将结果转换为DATETIME,例如:
<div class="row">
<?php echo $form->labelEx($model,'transport_allowance'); ?>
<?php echo $form->dropDownList($model,'transport_allowance',array('Car'=>'Car','Others'=>'Others')); ?>
<?php echo $form->error($model,'transport_allowance'); ?>
</div>
<div id="others" style="display:none">
<div class="row">
<?php echo $form->labelEx($model,'transport_allowance'); ?>
<?php echo $form->textField($model,'transport_allowance'); ?>
<?php echo $form->error($model,'transport_allowance'); ?>
</div>
</div>
<div id="car" style="display:none">
<div class="row">
<?php echo $form->hiddenField($model,'transport_allowance',array('value'=>'450')); ?>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
$("#Vehicle_transport_allowance").change(function () {
if ($(this).val() == 'Car') {
$('#car').show();
$('#others').hide();
} else {
$('#others').show();
$('#car').hide();
}
});
});
</script>
答案 2 :(得分:-4)
确保列具有相同的数据类型,编码和名称。例如,其中一个联合名称为name,下一个联合语句名为cat_name。确保select中的别名在所有联合中都是相同的。