表格布局示例:http://rextester.com/qsdqa17146
我不是100%肯定。。但我相信这个错误是由于查询方面的原因。。。。
背景:我有一个查询..我将数组传递给它,用于根据表中数组中的值/字段检索数据。
我最初使用的是in()子句。。但因为我的数组可以/确实有重复项(即:1、2、3、4、2、3、6、7)。。我需要为in()子句中的每个值返回一行(即使表中只有一行)。。
在这里得到一些帮助后..我被告知要将此更新为union all查询。。因此,我实际上可以为数组中的每个项返回一行(不管它是否重复)
SELECT * FROM tablex
WHERE CONCAT(brandname, ' ', dosage) IN (
'Zyflo CR Extended-release tablet 600 mg',
' SEE NOTES BELOW',
'Zyflo CR Extended-release tablet 600 mg'
) ORDER BY FIELD(
CONCAT(brandname, ' ', dosage),
'Zyflo CR Extended-release tablet 600 mg',
' SEE NOTES BELOW',
'Zyflo CR Extended-release tablet 600 mg'
);
所以我尽我所能更新了一些东西来使用pdo和union all calls。
SELECT t.* FROM (
SELECT 1 as seq,
'Zyflo CR Extended-release tablet 600 mg' as item
UNION ALL
SELECT 2, ' SEE NOTES BELOW '
UNION ALL
SELECT 3, 'Zyflo CR Extended-release tablet 600 mg'
) AS inList
INNER JOIN pbaap_drugs AS t ON inList.item = CONCAT(t.brandname, ' ', t.dosage);
我现在得到了每一个项目返回一行。。但是,返回的数据并不遵循传递到查询中的数组的原始顺序。
我这样调用函数/查询:
$gn_displayList = get_displayList_alt($tablename, $conn, array_values(array_filter($_POST['gn_MedicineSelect'])));//array_filter() added to get count of only non empty indexes (no bloat)
我试着输出一些调试代码并跟踪数组顺序的变化。。它似乎在查询返回部分?
以下是传递到上述函数中的数组(已解析):
FILTERED ARRAY CONTENTS: array(3) { [0]=> string(39) "Zyflo CR Extended-release tablet 600 mg" [1]=> string(17) " SEE NOTES BELOW " [2]=> string(39) "Zyflo CR Extended-release tablet 600 mg" }
在实际的查询函数中,我动态地构建了union all结构..等等。。我再次检查数组(我可以发布这个。。。但我不想阻止人们把注意力集中在事物的顺序上)
array(3) { [0]=> string(39) "Zyflo CR Extended-release tablet 600 mg" [1]=> string(17) " SEE NOTES BELOW " [2]=> string(39) "Zyflo CR Extended-release tablet 600 mg" }
一切似乎都很好。。正确的内容。。并纠正原来的顺序。
然而。。当我得到查询响应/数据时。。顺序不一样。好像是阿尔法整理的?
array(3) { [0]=> array(10) { ["id"]=> string(2) "74" ["lastupdated"]=> string(19) "0000-00-00 00:00:00" ["category"]=> string(24) "5-Lipoxygenase Inhibitor" ["brandname"]=> string(32) "Zyflo CR Extended-release tablet" ["genericname"]=> string(8) "zileuton" ["dosage"]=> string(6) "600 mg" ["image"]=> string(43) "Zyflo CR Extended-release tablet 600 mg.jpg" ["zone"]=> string(16) "green,yellow,red" ["menu"]=> string(1) "1" ["active"]=> string(1) "1" } [1]=> array(10) { ["id"]=> string(2) "74" ["lastupdated"]=> string(19) "0000-00-00 00:00:00" ["category"]=> string(24) "5-Lipoxygenase Inhibitor" ["brandname"]=> string(32) "Zyflo CR Extended-release tablet" ["genericname"]=> string(8) "zileuton" ["dosage"]=> string(6) "600 mg" ["image"]=> string(43) "Zyflo CR Extended-release tablet 600 mg.jpg" ["zone"]=> string(16) "green,yellow,red" ["menu"]=> string(1) "1" ["active"]=> string(1) "1" } [2]=> array(10) { ["id"]=> string(2) "78" ["lastupdated"]=> string(19) "0000-00-00 00:00:00" ["category"]=> string(0) "" ["brandname"]=> string(16) " SEE NOTES BELOW" ["genericname"]=> string(0) "" ["dosage"]=> string(0) "" ["image"]=> string(0) "" ["zone"]=> string(16) "green,yellow,red" ["menu"]=> string(1) "1" ["active"]=> string(1) "1" } }
1条答案
按热度按时间hgqdbh6s1#
没有一个
ORDER BY
a条款SELECT
,mysql可以按其选择的任何顺序自由返回行。这种行为符合标准。如果需要按特定顺序返回行,则提供
ORDER BY
在最外面SELECT
.例如,我们可以列出
seq
列作为ORDER BY
以便在seq
命令。我们可以向order by中添加其他表达式,以使行的顺序更具确定性(即,当有多行来自t
“匹配”来自inList
)(请注意
t
那场比赛item
在seq=1和seq=3的行上,将不匹配seq=2的行。除了行的顺序之外,规范不清楚查询的预期返回是什么。)