php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.11.2005, 13:58  
Gast
 
Beiträge: n/a
Standard Ausgabe im Array sortieren

Hallo liebe com,

Ich habe eine SQL-Ausgabe in ein Array gepackt und möchte dies ohne eine neue SQL-Anweisung zu senden, sortieren.



PHP-Code:
<?php
$ResultPointer 
mysql_query("SELECT * FROM events") or die(mysql_error()); ?>
 
<table border="0" class="veranstaltung">

<?   
    
while ($row mysql_fetch_array($ResultPointerMYSQL_BOTH)) {
    
    foreach(
$row as $res)
       
$sortAux[] = $res['theme']; //sortieren nach Spalte 'spaltenname'
        
array_multisort($sortAuxSORT_ASC$row);
  
    echo 
"<tr>
    <td colspan=\"5\">"
;<? echo $row['theme']; ?> 
    <? echo "</td></tr>.....
?>
Dabei erhalte ich folgende zwei Fehlermeldungen:
Zitat:
Warning: array_multisort(): Array sizes are inconsistent in ...... on line 10

Warning: array_multisort(): Array sizes are inconsistent in ...... on line 10
Wie kann ich die Sortierung realisieren bzw. was ist falsch?
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.11.2005, 14:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Ausgabe im Array sortieren

Zitat:
Zitat von smartdragon
[php]<?php
foreach($row as $res)
$sortAux[] = $res['theme']; //sortieren nach Spalte 'spaltenname'
array_multisort($sortAux, SORT_ASC, $row);
Ich finde es am einfachsten, dass SQL das übernimmt. Mit array_multisort habe ich daher noch nie gearbeitet. Ich weiß nicht, ob es Fehler sind,

Trotzdem Hinweis:
mysql_fetch_array() liefert dir alle Spalten doppelt, numerischer Index + assoziativer.

in foreach()'s $res steht der Wert einer Datenbankzelle. Mein Verständnis sagt, dass es kein Array ist, de ein Element namens 'theme' enthalten könnte.

$sortAux wird bei dir nie resetet, es wächst pro while() durchlauf um die Anzahl der Spalten. Das ist wohl kaum gewünscht?!

Mach mal ein
[php:574a75d62b]
<?php
echo '<pre>';
print_r($sortAux);
echo '</pre>';
?>[/php:574a75d62b]
mit in die while-Schleife. Übrigens, ob du per MySQL oder PHP sortierst macht keinen Unterschied, du hast eher noch mehr Aufwand, da MySQL in der Hinsicht "geübter" ist und du dir ansonsten den kompletten Array merken musst, wenn du neu sortieren willst (Page-Reload).

Wenn du also umsonst MySQL-Abfragen machen kannst (vor kurzem war hier ein Spezi, der dafür pro Anfrage gezahlt hat) und dein MySQL-Server Anfragen normal schnell bearbeitet, machs mit MySQL
Zergling-new ist offline  
Alt 03.11.2005, 14:53  
Gast
 
Beiträge: n/a
Standard

ich würde das auch gerne mysql machen lassen, jedoch gehen dabei die vorher selectierten Datensätze verloren, da es, mir keine bekannte, Abfrage a la

PHP-Code:
<?php
$result1 
mysql_query ("select * from events WHERE w=1 ORDER BY category DESC")
$sort1 mysql_query ("select * from ($result1) ORDER BY name DESC)
$sort2 = mysql_query ("
select from ($result1ORDER BY xyz DESC)?>
gibt.

Es wäre daher wahrscheinlich nur die Möglichkeit übrig ($result1) in ein ASSOC und NUM Array zu packen, damit die Zeilen mit den Spalten referentiell sind und dann zu sortieren. Da kommt dann wohl nur fetch_array in Frage, da fetch_row nur einzelne Zeilen liefert und fetch_object nur einen Zugriff auf Daten per Feldnamen erlaubt.

Da muss ich mal einiges Ausprobieren... und ich brauche nicht pro Anfrage bezahlen
Ich frage mich wo es sowas geben soll und wer das zählt?
 
Alt 03.11.2005, 15:07  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Stichwort JOIN vielleicht?
Wie sehen deine Datenbank-Tabellen aus und was möchtest du genau als Ergebnis haben?
Zergling-new ist offline  
Alt 03.11.2005, 15:16  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

Das meiste wurde ja schon vor mir gesagt (smartdragon, du hast einen fehler im code ), es ist besser mit Mysql zu sortieren.

Aber wenn du multisort benutzen willst, so gehts:
Zitat:
Die angegebenen Arrays werden als Spalten einer Tabelle behandelt
Du gibst also nicht an, nach welcher Spalte das ganze sortiert werden soll, sondern packst das erste Array einfach als erstes rein.
Wenn du nach Spalte1, Spalte3, Spalte2 sortieren willst, geht das so:
PHP-Code:
<?php
array_multisort
($Spalte1,$Spalte3,$Spalte2);
//oder
array_multisort(array($Spalte1,$Spalte3,$Spalte2));
?>
nach dem ersten Array kann man, wie du es auch getan hast, noch die im manual bezeichneten FLAGs einsetzen.
Beachte aber, dass es sich bei den Arrays um die Spalten, nicht um die Zeilen handeln soll. So kannst du an die Zeilen kommen:

PHP-Code:
<?php
$spalten 
= array();
while(
$row mysql_fetch_assoc($result)) {
   foreach(
$row AS $name => $value)
      
$spalten[$name][] = $value;
}
?>
danach enthält $spalten alle spalten, allerdings nicht zwingen in der richtigen Reihenfolge. Ich hoffe mal, dass du das sortieren der Spalten im array hinbekommst, oder einfach gleich die mysql-sortierung nimmst, helfe aber natürlich auch gerne weiter, falls es andere probs gibt :wink:
Buhmann ist offline  
Alt 03.11.2005, 16:27  
Gast
 
Beiträge: n/a
Standard

O.K. danke Buhmann und Zergling ich versuche es mal mit mysql.

Die Tabellen:

events
- event_id (auto_incr) PK
- date1 (date) //Anfangsdatum
- date2 (date) //Enddatum
- theme
- info
- mo (checkbox für Montag)
- ...
- so (checkbox für Sonntag)
- worker_id (FK)
- category_id (FK)

category
- id (auto_incr) PK
- category

worker
- id (auto_incr) PK
- name
- email
- tel

das wären die Tabellen.

Das Abfrage-Ergebnis sieht so aus, dass das jeweilige Event mit der dazugehörigen Kategorie und dem Mitarbeiter nach verschiedenen ausgewählten Kriterien bereits ausgegeben wird. Soweit funktioniert das.

Weiterhin soll es möglich sein diese Ausgabe per Klick (Button oder Grafik) zu sortieren. z.B. nach category DESC, theme DESC, name DESC etc. ohne dass vorherige Ergebnis (weil schon nach Kriterien z.B. Zeit sortiert) zerstört wird.

Beispiel unter: http://clients.smartdragon.de/test/veranstaltungen.php
 
Alt 03.11.2005, 17:05  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Was ist FK? PK = PrimaryKey nehme ich an.

Also nach den Spalten innerhalb von 'events' kannst du ja sowieso ohne Probleme mit
Code:
ORDER BY events.<spaltenname>
sortieren.

Wenn ich mich nicht täusche, geht das aber auch mit den anderen Spalten
Code:
ORDER BY category.<spaltenname>
(Anmerkung: Eine Spalte sollte nicht gleich heißen wie eine Tabelle, ein reserviertes Wort oder eine Datenbank. Bei MySQL klappt das zwar meistens, da durch die Position des Begriffs klar ist, was für ein Typ gemeint ist, aber den "Leser" verwirrt das möglicherweise)

Eventuell musst du nach der zu sortierenden Spalte gruppieren. Stichwort: GROUP BY
Zergling-new ist offline  
Alt 03.11.2005, 17:38  
Gast
 
Beiträge: n/a
Standard

Ja, das mit den Bezeichnungen ist mir klar. FK (ForeignKey) da mysql aber sowas wie referentielle Int. nicht wirklich kennt, soll hier nur darauf hingewiesen werden, dass sich dieses Feld eine Beziehung zu einem Feld einer anderen Tabelle hat... (das wolltest du doch hören ? :wink: )

Jedenfalls löst auch group etc. wohl nicht mein problem, da hier eine Sortierung eines Ergebnisses einer vorangegangenen mysql_query welche schon sortiert wurde, passieren soll. s.obiger "wunsch mysql_sortier_befehl"

d.h.:

Abfrage:. select menge x aus 10 sortier nach y //ergibt z.B. 5 Datensätze
Anzeige: 5 Datensätze (aus mysql_fetch_object) nach y sortiert
Sortiere: diese 5 Datensätze jetzt aber nach z DESC //weil user gerne pfeiltasten drückt
Anzeige: 5 Datensätze nach z DESC sortiert

Ich denke nicht dass das in mysql lösbar ist, lasse mich aber gerne überaschen.



@Zergling

Zitat:
Wenn ich mich nicht täusche, geht das aber auch mit den anderen Spalten
Du täuschst dich nicht, da die select-Anweisung alle ausgewählten Felder/Spalten auch aus mehreren Tabellen in einer Tabelle zusammenfasst und somit auch zur Verfügung stehen.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Array nach bestimmter Spalte sortieren GELight PHP Tipps 2006 4 19.08.2006 23:42
Mehrdimensionales Array sortieren Unbekanntes_Pferd PHP Tipps 2006 6 23.05.2006 20:42
array richtig sortieren, dann ausgeben Heart PHP Tipps 2006 5 28.04.2006 20:23
Ausgabe Array in schleife PHP Tipps 2006 2 01.02.2006 13:49
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Array verkehrt sortieren (key) // letzter Arrayeintrag PHP Tipps 2005-2 5 20.09.2005 15:55
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array sortieren PHP Tipps 2005 7 15.05.2005 02:14
2 Array in Abhänigkeit sortieren? PHP Tipps 2005 4 10.02.2005 20:31
Array mit Gruppen: Wie Sortieren PHP Tipps 2005 2 29.01.2005 15:15
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql_fetch_assoc array_multisort, array ausgabe sortieren, array_multisort macht, php while ausgabe nach bestimmter id sortieren, php array ausgabe sortieren, datenbankzelle mit foreach auslesen, php sortierte ausgabe mit button, array sortieren php, php multisort verschiedene kriterien, mehrere werte aus einer datenbankzelle lesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:10 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.