gpt4 book ai didi

php - 拉拉维尔 4 : DB:select returns rows ordered randomly

转载 作者:行者123 更新时间:2023-11-29 22:12:17 25 4
gpt4 key购买 nike

这是一个很好的。我正在通过 DB::select($sql) 运行以下查询:

SELECT DISTINCT `listings`.`listing_id` FROM `listings`
STRAIGHT_JOIN `listings_coords` ON `listings_coords`.`listing_id` = `listings`.`listing_id`

LEFT JOIN `listings_lettings`
ON `listings`.`transaction_type` != 1 AND `listings_lettings`.`listing_id` = `listings`.`listing_id`
LEFT JOIN `listings_lettings_rent_frequencies`
ON `listings`.`transaction_type` != 1 AND `listings_lettings_rent_frequencies`.`listings_lettings_rent_frequency_id` = `listings_lettings`.`listings_lettings_rent_frequency_id`
LEFT JOIN `listings_units` ON `listings`.`listings_unit_id` = `listings_units`.`listings_unit_id`

WHERE
`listings`.`active` = 1
AND `listings`.`published_flag` = 1

AND `listings`.`country_id` = 223

AND `listings`.`property_type` = 1
AND `listings`.`listings_status_id` = 1

AND `listings`.`lat` BETWEEN 51.391407971014 AND 51.623292028986
AND `listings`.`lng` BETWEEN -0.31403791919581 AND 0.05851791919581AND st_intersects((SELECT `polygon` FROM locations WHERE location_id = 65), `listings_coords`.`coords`)

ORDER BY

IF(`price_sales` IS NULL AND `price_lettings` IS NULL AND ((`price_per_unit_sales` IS NULL AND `price_per_unit_lettings` IS NULL) OR `max_size` IS NULL), 1,
IFNULL(`price_sales`, IF(`price_lettings` IS NOT NULL, `price_lettings` * IFNULL(`listings_lettings_rent_frequencies`.`months`, 1), IFNULL(`price_per_unit_sales` * `max_size` * `listings_units`.`meters`, `price_per_unit_lettings` * `max_size` * `listings_units`.`meters` * `listings_lettings_rent_frequencies`.`months`)))) DESC

LIMIT 0, 10

现在 - 在工作台上执行时查询总是返回完全相同的结果,但是所述函数返回的对象数组表现得很奇怪,也就是说 - 它随机化了我的结果:

array(10) {
[0]=>
object(stdClass)#548 (1) {
["listing_id"]=>
string(5) "31299"
}
[1]=>
object(stdClass)#547 (1) {
["listing_id"]=>
string(5) "19601"
}
[2]=>
object(stdClass)#550 (1) {
["listing_id"]=>
string(4) "6769"
}
[3]=>
object(stdClass)#551 (1) {
["listing_id"]=>
string(5) "19042"
}
[4]=>
object(stdClass)#552 (1) {
["listing_id"]=>
string(5) "24822"
}
[5]=>
object(stdClass)#553 (1) {
["listing_id"]=>
string(4) "6072"
}
[6]=>
object(stdClass)#554 (1) {
["listing_id"]=>
string(5) "19075"
}
[7]=>
object(stdClass)#555 (1) {
["listing_id"]=>
string(5) "34067"
}
[8]=>
object(stdClass)#556 (1) {
["listing_id"]=>
string(4) "6040"
}
[9]=>
object(stdClass)#557 (1) {
["listing_id"]=>
string(4) "6781"
}
}

这就是我转储查询和结果的方式:

$result = DB::select($sql);
print_r($sql);
echo "\n\n";
dd($result);

每次刷新页面时,上述结果的顺序都会发生变化(尽管前几个结果保持不变)。我已经坚持了很长一段时间了,所以任何提示将不胜感激!

编辑:

当我执行以下命令时,我达到了这一点:

IF(`price_sales` IS NULL, 1, 1) DESC

正在混合结果,因此它们似乎时不时地重新排列自己。知道无论price_sales 值是多少它都应该始终返回 1,这没有多大意义,对吗?

编辑2:

当我将 ORDER BY 移至 SELECT 时,它显示值实际上保持不变,但属性在相同值的组内移动。例如,排序值为 250 000 的三个属性正在更改彼此之间的顺序,但不会在所有结果中更改顺序。

最佳答案

所以显然问题是如果没有提供任何特定的顺序,MySQL 不会采取任何特定的顺序。这意味着 - 每个查询运行列表可能会以不同的方式排序。我的问题是 - 对于具有相同排序值的列表,顺序在具有相同值的列表中是随机的。由于从技术上讲,90% 的时间这些值实际上是不同的,因此问题并不那么容易发现。

关于php - 拉拉维尔 4 : DB:select returns rows ordered randomly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com