/    Sign up×
Community /Pin to ProfileBookmark

Order mysql results following a function

Hello,

In my database, I have two variables “longitude” and “latitude”. I use a function to know the distance between the user and the element in my database, for instance a touristic site.

The problem is to order results knowing that my distance variable ($longueur) is defined in my while loop for each result so i can’t use a ORDER BY

Thanks in advance for your tips

[code=php]<?php
$query=”SELECT * FROM matable WHERE Statut>=’0′”;
$db->setQuery($query);
$rs=$db->query();
function get_distance_m($Lat, $Long, $user_Lat, $user_Long) {…}
while($row=mysqli_fetch_array($rs)){
$Lat=$row[‘Lat’];
$Long=$row[‘Long’];
$longueur=round(get_distance_m($Lat, $Long, $user_Lat, $user_Long) / 1000, 3);
?>
… HTML Code …[/code]

to post a comment
PHP

2 Comments(s)

Copy linkTweet thisAlerts:
@iamjonesJul 05.2013 — On each iteration you should add $longueur to an array and then order the array.

Something like this:

[code=php]
//Outside the loop
$items = array(); //Or $items = []; if you are using PHP 5.4 or above

//Inside the loop do this
$items[] = round(get_distance_m($Lat, $Long, $user_Lat, $user_Long) / 1000, 3);
[/code]


Then after you can use sort() to sort the array.

Hope that helps.
Copy linkTweet thisAlerts:
@hares7293authorJul 05.2013 — Thanks for help.

I tried your approach but i can't work with the $items array as if i echo it i only get Array Array ... with no values.

I am a beginner with php, perhaps i missed something

I put my complete code so far :

[code=php]<?php
if(isset($_GET['cord'])){
$cord= $_GET['cord'];
list($user_Lat,$user_Long) = explode("-", $cord);

$query="SELECT * FROM table WHERE Statut>='0'";
$db->setQuery($query);
$rs=$db->query();

echo'<table>';

function get_distance_m($Lat, $Long, $user_Lat, $user_Long) {...}
$longueur = array();

while($row=mysqli_fetch_array($rs)){
$Lat=$row['Lat'];
$Long=$row['Long'];
$longueur[]=round(get_distance_m($Lat, $Long, $user_Lat, $user_Long) / 1000, 3);

//echo "$longueur";
//folowing is previous code where i putted $longueur alone without sorting

if ($longueur<="3") {
?>
<tr class="tr">
<td style="height:100"><a href="http://mobile.monsite.net/index.php/donnees.html?value=<?php echo"$row[Identifiant]"?>"><img src="http://mobile.monsite/images/uploaders/<?php echo"$row[Identifiant]/Images/Logo/logo.jpg"?>" alt="Logo" width="100" height="100"/></a></td>
<td>
<p>
<?php if ($longueur<=0.1){echo'<span class="distance">A moins de 100 m</span><br/>';}
elseif ($longueur>0.1 AND $longueur<=0.2){echo'<span class="distance">A moins de 200 m</span><br/>';}
elseif ($longueur>0.2 AND $longueur<=0.3){echo'<span class="distance">A moins de 300 m</span><br/>';}
elseif ($longueur>0.3 AND $longueur<=0.4){echo'<span class="distance">A moins de 400 m</span><br/>';}
elseif ($longueur>0.4 AND $longueur<=0.5){echo'<span class="distance">A moins de 500 m</span><br/>';}
elseif ($longueur>0.5 AND $longueur<=1){echo'<span class="distance">A moins d'1 km</span><br/>';}
elseif ($longueur>1 AND $longueur<=2){echo'<span class="distance">Entre 1 et 2 Km</span><br/>';}
else {echo'<span class="distance">A plus de 2 km</span><br/>';} ?>
<span class="magenta"><?php echo"$row[Identite]"?></span><br/>
<?php echo"$row[categorie]"?>
</p>
</td>
</tr>
<?php
}}
echo'</table>';
?>[/code]
×

Success!

Help @hares7293 spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 5.16,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @AriseFacilitySolutions09,
tipped: article
amount: 1000 SATS,

tipper: @Yussuf4331,
tipped: article
amount: 1000 SATS,

tipper: @darkwebsites540,
tipped: article
amount: 10 SATS,
)...