Suchergebnisse Sortieren

Grunge

Erfahrenes Mitglied
Hallo,

ich baue gerade an einer Membersuche für eine Datenbank. Folgendes Problem tut sich dabei auf:

Ich habe eine Seite "search.php". Jene enthällt ein Formular, welches Suchinformationen hat (nickname, alter .. .. ..) diese daten werden an die "search_action.php" geleitet und ausgewertet. Hier ersteinmal die search_action.php:

Code:
<?php
include "_functions.php";
$suche="";

//Prüfen welche Suchkriterien ausgefüllt worden sind
if($_POST['search_1']==""){
$suche=$suche;
}else{
$suche="nickname LIKE '%".$_POST['search_1']."%'";
}

[...]

$sql="SELECT * FROM usr_profile WHERE ".$suche."";
$result=mysql_query($sql) or die(mysql_error());

$user="";
$i=1;
while($row=mysql_fetch_assoc($result)){
    $v="user_".$i;
    $$v=$row['nickname'];

    if(isset($_POST['search_8'])) {
    $img=1;
    $img_check="SELECT * FROM usr_images WHERE nick='".$row['nickname']."' AND standard='1'";
    $result_check=mysql_query($img_check) or die(mysql_error());
    if (mysql_fetch_assoc($result_check)){
    if($user==""){
    $user=$v."=".$$v;
    }else{
    $user=$user."&".$v."=".$$v;
    }
    }
    }else{
    $img=0;
    if($user==""){
    $user=$v."=".$$v;
    }else{
    $user=$user."&".$v."=".$$v;
    }
    }
    $i++;
}
$i=$i-1;
echo "<meta http-equiv=\"refresh\" content=\"0; url=index.php?section=search&sort=nickname&art=Aufsteigend&count=".$i."&searched=1&".$user."\">";


?>

Wie man sehen kann werden die Suchkriterien in eine Variable gespeichert, und dann an den query gehangen. Die Ausgabe funktioniert auch ganz gut soweit, diese funktioniert nämlich so: (den get-wert sort und art kann man vernachlässigen wie ihr gleich sehen werdet):

Code:
for($i=1;$i<=$_GET['count'];$i++){
			    $v="user_".$i;
			
			
			if($_GET['art']=="Absteigend"){
			$profile="SELECT * FROM usr_profile WHERE nickname='".$_GET[$v]."' ORDER BY ".$_GET['sort']." ASC";
			echo $profile."<br>";
			$result=mysql_query($profile) or die(mysql_error());
			}else{
			$profile="SELECT * FROM usr_profile WHERE nickname='".$_GET[$v]."' ORDER BY ".$_GET['sort']." DESC";
			echo $profile."<br>";
			$result=mysql_query($profile) or die(mysql_error());
			}
			
			while ($row=mysql_fetch_assoc($result)){
.
.
.
wie ihr vielleicht bemerkt habt, kann die sortier funktion im query vergessen - da ja für jeden nick ne eigene abfrage gemacht wird, anders ist es aber in diesem beispiel ja nicht zu realisieren.

Könnt ihr mir sagen wie ich die Ausgabe trotzdem sortieren kann !?

Danke im Vorraus
 
Du meine Güte o_O gewöhne dir dohh bitte das Einrücken deiner Codes an ;)
Nun zu deinem "Problem". Die Lösung ist ein Array ^^
einfach alle Query-Ergebnisse in nen Array packen und den dann sortieren. Funktionen wie sort(), arsort(), asort(), ksort(), krsort(), natsort(), natcasesort(), rsort(), usort(), array_multisort() und uksort()... helfen dir dann ;)
schau am besten mal bei php.net in der Doku
 
habe ich schon gefunden... Doch ich war mir nicht sicher, wie ich das in ein multidimensionales array packen soll .. kannst du mir da weiterhelfen !?
 
einfach eine Variable als Array definieren und in etwa so weiter machen:
PHP:
$img_check="SELECT * FROM usr_images WHERE nick='".$row['nickname']."' AND standard='1'";
$result_check=mysql_query($img_check) or die(mysql_error());
$result = mysql_fetch_array($result_check);
$suchErgebniss[] = $result;     //bzw. um dir eine Dimension zu sparen, wenn du nur einen Datenbankeintrag auslesen möchtest z.B. eine ID, könntest du auch einfach $result[0] schreiben ->solltest dann oben im SELECT natürlich nicht * angeben
[...]
/*in der Ausgabe kommt dann in etwa soetwas array ( 0 => array ( ID => "1", nick => "Testuser") ) , bei der weiteren Sortierung musst du dann natürlich gucken, warscheinlich ist usort() schon flexibel genug, ohne das du am MultiArray rumfummeln musst ;)*/

Nachtrag: Habe gerade nocheinmal auf php.net nachgeschaut: Um den MultiArray zu sortieren schaue dir am besten mal Beispiel 273 auf http://de2.php.net/usort an
 
Zuletzt bearbeitet:
aber dann habe ich doch wieder das problem, dass ich mehrere array habe, da ich ja in der schleife pro übergebenen user nen query starte......
^^
 
Zuletzt bearbeitet:
Ich dachte es geht dir um das Sortieren bei der Ausgabe :confused: was deine "Query-Flut" betrifft lässt die sich nicht eindämmen, wenn du mit LIKE '% arbeitest ;)
(das Problem hatten wir auch schon in diesem Thread: http://www.tutorials.de/forum/php/225593-mysql-suche-2.html ^^)

Was das Sortieren der Suchergebnisse betrifft (wenn es das war was du meintest): Wenn es mehrere Ergebnisse pro Query und von den Querys wiederum mehrere sind, lassen die sich nunmal nicht anders, als aus einem MultiArray heraus sortieren (mir ist zumindest keine andere effektive Methode bekannt, als die die ich oben schon beschrieben habe)
Und das Sortieren aus einem MultiArray ist doch kein Problem ^^ wie schon geschrieben, du hättest dir das Beispiel hier angucken sollen ;)
PHP:
<?php
function cmp($a, $b) {
   return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "Zitrone";
$fruits[1]["fruit"] = "Apfel";
$fruits[2]["fruit"] = "Traube";

usort($fruits, "cmp");
[...]

/*errgibt in der Ausgabe:
$fruits[0]: Apfel
$fruits[1]: Traube
$fruits[2]: Zitrone*/

k, versuche ich mal nett zu sein, folgender Code sollte funktionieren (hab ihn allerdings nicht getestet)
PHP:
/*z.B. folgenden Array wollen wir alphabeitsch sortieren:
array(0 => array(0 => "Tester", 1 => "1", 2 => "3"), 1 => array(0 => "Ulf", 1 => "8", 2 => "0"), 2 => array(0 => "Andreas", 1 => "3", 2 => "8"))*/

//Sortiert nach dem 1.Element
usort($user, create_function('$a, $b', 'return strcmp($a[0], $b[0]);'));

//Sortiert nach dem 3.Element
function sortieren($a,$b) {
	if ($a[2]==$b[2]) return 0;
		return ($a[2] > $b[2]) ? -1 : 1;
}

usort ($user, sortieren);

//Beispiel-Ausgabe
while(list($i,$s)=each($user)){
	echo $i." -> ".$s[0].",".$s[1].",".$s[2].",".$s[3];
}
 
Zuletzt bearbeitet:
wie soll ich das denn tun. Ich glaube die Problematik ist noch nicht klar geworden. Wenn man etwas sucht, zum beispiel alter, plz, ort oder so des members wird in der search_action.php nur der benutzername der jene kriterien erfüllt zurückgeliefert und die anzahl der gefundenen ergebnisse.

UNd in der search wird dann in einer schleife jedenfalls die ganzen informationen geholt. Das funktioniert doch so gar nicht mit nem Array. Wie kann ich es denn effektiv in der selben Datei auswerten !?
 
Zurück