Antwort
 
Themen-Optionen
Alt 28.12.2005, 15:17 Nach oben    #1
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard [MySQL] Frage zum richtigen ORDER BY

Ich habe eine Baumstruktur. Dafür habe ich die drei relevanten Spalten - jeweils vom Typ int(11
`_id`, `_num`, `_parent`

_id ist auto_increment. Einfach nur eine ID halt...

_parent zeigt an, welche _id parent ist. Wenn der Eintrag nicht untergeordnet ist, dann ist _parent = 0

mit _num sortiere ich die Reihenfolge, sofern mehrere Einträge den gleichen parent haben.

Soweit klar?
Diese Struktur ist fest - die wird bereits verwendet!


Nun möchte ich jedoch eine Liste aller Einträge haben, sortiert nach der richtigen Reihenfolge.

Richtig definiere ich hierbei wie folgt:
Als erstes kommt der Eintrag, der _parent = 0 hat und den niedrigsten Wert in der Spalte _num hat.

Sollten Einträge die id des eben genannten Eintrages als _parent haben, so sollen nun diese folgen (sortiert nach _num)

Wenn keine Einträge mehr nach dem genannten Kriterium folgen, dann soll mit dem (nach _num sortierten) nächsten Eintrag mit _parent = 0 weiter gemacht werden, wo wiederum dann die 'Kinder' folgen.

Soweit die Theorie, ich weiß aber überhaupt nicht, wie ich das ORDER BY gestalten soll

In der Hoffnung, das ausreichend verständlich dargestellt zu haben freue ich mich auf Hilfe!
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 23:53 Nach oben    #2
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Ich habe natürlich keine Ahnung *g*, aber ich denke, dass das nicht so ohne Weiteres in einem Query geht.
Vielleicht mal nach GROUP BY und damit verbundenem ORDER BY schauen?

Nur so als Einstieg, vielleicht hat ja wer mehr Ahnung .

Grüße Ben.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.12.2005, 23:58 Nach oben    #3
.
 
Registriert seit: 21.09.2005
Ort: CH-JP
Beiträge: 47
Standard

PHP-Code:
SELECT ... ORDER BY _parent ASC_num ASC
//**** Alternativ
SELECT ... ORDER BY _parent_num ASC 
Ich bin mir nicht sicher ob ich deine Frage richtig vertsanden hab, aber so sollte es den gewünschen effekt erziehlen. oder?

Wenn nicht, könntest du dann das gewünschte ausgabeprozedere etwas praäzisieren?


gruss
_root

edit: Ach habe irgend wie das id prozedere überlesen, update folgt.

Geändert von _root (29.12.2005 um 00:02 Uhr).
_root ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 00:03 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.480
Standard

Hm,
ich hab das so verstanden, dass er am Ende sowas haben will
Code:
parentID = 0
   - num = 0
   - num = 2
   - num = 3
parentID = 1
   - num = 2
   - num = 3
...
Ah stimmt .. das wäre ja tatsächlich der obigen Query ... ... meine Fresse. Ich werde alt.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 00:18 Nach oben    #5
.
 
Registriert seit: 21.09.2005
Ort: CH-JP
Beiträge: 47
Standard

Zitat:
Zitat von Ben
Hm,
ich hab das so verstanden, dass er am Ende sowas haben will
Code:
parentID = 0
   - num = 0
   - num = 2
   - num = 3
parentID = 1
   - num = 2
   - num = 3
...
Ah stimmt .. das wäre ja tatsächlich der obigen Query ... ... meine Fresse. Ich werde alt.
Zitat:
Sollten Einträge die id des eben genannten Eintrages als _parent haben, so sollen nun diese folgen (sortiert nach _num)
Dieser Satzt verwirrt mich? Aus dem Grund stimmt die lösung wohl nicht. Was meint Du (Jan,H) dazu, wie ist das zu verstehen?
_root ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 10:20 Nach oben    #6
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

ok - sry, ich hatte befürchtet, dass ich das mal wieder zu umständlich ausgedrückt habe...

also, als erstes Mal einen Überblick über die Datensätze:
Code:
SELECT
    `_id`, `_num`, `_show`, `_parent`

FROM
    `CMS_tutorial_content`

ORDER BY
    `_id` ASC
liefert:
Code:
_id   	_num   	_parent 
1	-99	0
2	3	0
3	5	0
4	2	0
5	1	4
6	1	4
7	3	4
8	1	2
9	2	2
10	10	0
11	2	10
12	5	2
13	6	2
15	7	2
16	9	2
17	10	2
18	11	2
19	4	2
20	8	2
21	13	2
22	14	2
23	3	2
24	1	10
26	15	2
27	16	2
28	17	2
29	17	2
Was ich nun suche ist ein ORDER BY, oder meinetwegen auch anders....
für folgendes Ergebnis:
Code:
_id   	_num   	_parent
1	-99	0
4        2       0
5        1       4
6        1       4
7        3       4
2	 3	 0
8        1       2
9        2       2
23       3       2
19       4       2
12       5       2
13       6       2
15       7       2
20       8       2
16       9       2
17       10      2
18       11      2
21       13      2
22       14      2
26       15      2
27       16      2
28       17      2
29       17      2
3	 5	 0
10       10      0
24       1       10
11       2       10
Also im Prinzip, dass alle Ergebnisse mit _parent = 0 gelistet werden, und sofern vorhanden, dann die Ergebnisse mit _parent = _id von dem eben folgen, bevor es mit Treffern zu _parent = 0 weitergeht...
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (29.12.2005 um 22:21 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 14:17 Nach oben    #7
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Code:
ORDER BY
    _parent,
    _num
        ASC
Wie _root schon sagte :>
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 22:22 Nach oben    #8
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

Zitat:
Zitat von Lars
Wie _root schon sagte :>
das ist eben nicht das gewünschte Ergebnis...

bei dem käme dann folgendes raus:
Code:
_id || _num || _parent
1 || -99 || 0
4 || 2 || 0
2 || 3 || 0
3 || 5 || 0
10 || 10 || 0
8 || 1 || 2
9 || 2 || 2
23 || 3 || 2
19 || 4 || 2
12 || 5 || 2
13 || 6 || 2
15 || 7 || 2
20 || 8 || 2
16 || 9 || 2
17 || 10 || 2
18 || 11 || 2
21 || 13 || 2
22 || 14 || 2
26 || 15 || 2
27 || 16 || 2
28 || 17 || 2
29 || 17 || 2
5 || 1 || 4
6 || 1 || 4
7 || 3 || 4
24 || 1 || 10
11 || 2 || 10
Zitat:
Zitat von Jann Hendrik
Also im Prinzip, dass alle Ergebnisse mit _parent = 0 gelistet werden, und sofern vorhanden, dann die Ergebnisse mit _parent = _id von dem eben folgen, bevor es mit Treffern zu _parent = 0 weitergeht...
Ich habe dazu nochmal die obige Darstellung farblich gestaltet.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 29.12.2005, 22:58 Nach oben    #9
.
 
Registriert seit: 21.09.2005
Ort: CH-JP
Beiträge: 47
Standard


Ich denke mal das Du ohne speziellen Komplizierten algorythmus wohl kaum zum Ziel kommen wirst. Stellen sich solche fragen würde ich meinen das beim Datenbank Design oder bei der Projekt realisation einfach geschlampt wurde?!
So auf die schnelle kann man ja bei deiner Id sortierung keine gemeinsamkeiten gruppierungen oder anderes feststellen.
Ich weiss nicht was du jetzt erwartest von uns!?
_root ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.12.2005, 14:09 Nach oben    #10
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

Nun, es ist als kleine gimmick in einem CMS geplant gewesen. Ich kann das ja ohne weiteres in 2 Abfragen unterbringen, aber ich dachte, dass es ggf. möglich wäre, das in einem hinzubekommen....

Eine Erwartungshaltung habe ich nicht, aber ggf. hat jmd. ja ausreichend Ahnung, um mir zu sagen, wie es geht, bzw., dass es nicht geht...

Wenn es einfach wäre, dann hätte ich das ja auch alleine gemacht
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.12.2005, 15:17 Nach oben    #11
.
 
Registriert seit: 21.09.2005
Ort: CH-JP
Beiträge: 47
Standard

Zitat:
Zitat von Jann Hendrik
Ich kann das ja ohne weiteres in 2 Abfragen unterbringen, aber ich dachte, dass es ggf. möglich wäre, das in einem hinzubekommen....
Darf man die mal sehen? Etv. hätte ich dann noch ne möglichkeit für dich parat?!
_root ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.12.2005, 22:10 Nach oben    #12
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

ich habe da gerade noch nichts gebastelt, aber das ist ja nicht der Akt...

einfach alle mit _parent = 0 abfragen und anschließend in einer while() abarbeiten. Dort dann für jedes Ergebniss aus der eben gewonnenen Liste wieder eine Abfrage machen
SELECT * FROM tabellenname WHERE _parent = _id(von eben)

Lange Liste kreieren - fertig. Ist halt ein wenig länger, aber wenn das nicht in einem querry geht, dann ist ein Weg....


Verstehst, wie ich das meine?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.12.2005, 23:00 Nach oben    #13
.
 
Registriert seit: 21.09.2005
Ort: CH-JP
Beiträge: 47
Standard

Zitat:
Zitat von Jann Hendrik
ich habe da gerade noch nichts gebastelt, aber das ist ja nicht der Akt...

einfach alle mit _parent = 0 abfragen und anschließend in einer while() abarbeiten. Dort dann für jedes Ergebniss aus der eben gewonnenen Liste wieder eine Abfrage machen
SELECT * FROM tabellenname WHERE _parent = _id(von eben)

Lange Liste kreieren - fertig. Ist halt ein wenig länger, aber wenn das nicht in einem querry geht, dann ist ein Weg....


Verstehst, wie ich das meine?
Ich Versuche es.

Du holst dir alle mit _parent = 0 benütz du jetzt weiter den Wert _parent oder den Wert _id?

Sprich:
PHP-Code:
$query1 query('SELECT _id FROM table WHERE _parent=0 ORDER BY _parent ASC');
while(
fetch_array())
{
   
$query2 query('SELECT * FROM table WHERE _parent = _id ORDER BY  _num ASC')
   while(
fetch_array2)
   {
      
$list[] = $row;
   }

$list soll nun eigntlich dieses Resultat beinhalten?

Code:
_id       _num       _parent
 1    -99    0
 4        2       0
 5        1       4
 6        1       4
 7        3       4
 2     3     0
 8        1       2
 9        2       2
 23       3       2
 19       4       2
 12       5       2
 13       6       2
 15       7       2
 20       8       2
 16       9       2
 17       10      2
 18       11      2
 21       13      2
 22       14      2
 26       15      2
 27       16      2
 28       17      2
 29       17      2
 3     5     0
 10       10      0
 24       1       10
 11       2       10

Das ist mir noch ein Rätsel:
Code:
 3     5     0 

edit: fixed

Geändert von _root (31.12.2005 um 11:59 Uhr).
_root ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.12.2005, 11:57 Nach oben    #14
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

ORDER BY fehlt. So werden die Datensätze zurückgegeben, wie sie eingefügt wurden.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.12.2005, 14:46 Nach oben    #15
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

so - ich habe das mal mit Ausgabe (echo) dargestellt.
PHP-Code:
<?php
  $sql 
"SELECT
              `_id`, `_num`, `_show`, `_parent`

          FROM
              `CMS_tutorial_content`

          WHERE
              `_parent` = 0

          ORDER BY
              `_num` ASC"
;

  
$result $DB->query($sql) or $DB->error('#2'); ;


  echo 
'<table><tr><td>id</td><td>num</td><td>parent</td></tr>';



  while (
$row mysql_fetch_assoc($result))
  {
    echo 
'<tr><td>'.$row['_id'].'</td><td>'.$row['_num'].'</td><td>'.$row['_parent']."</td></tr>\n";
    
$sql2 "SELECT
              `_id`, `_num`, `_show`, `_parent`

          FROM
              `CMS_tutorial_content`

          WHERE
              `_parent` = '"
.$row['_id']."'

          ORDER BY
              `_num` ASC"
;
    
$result2 $DB->query($sql2) or $DB->error('#3'); ;
    while (
$row2 mysql_fetch_assoc($result2))
    {
      echo 
'<tr><td>'.$row2['_id'].'</td><td>'.$row2['_num'].'</td><td>'.$row2['_parent']."</td></tr>\n";
    }
  }
  echo 
'</table>';
?>
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
indireckte Frage zu Template system kampfgnom PHP-Programmierung 4 04.06.2007 04:12
ORDER und GROUP BY Basti Datenbanken 5 13.04.2007 11:24
[MySQL] ORDER BY - 0 am ende thrawn Datenbanken 5 24.01.2007 14:14
Order BY im Tabellenheader jennifer PHP-Programmierung 19 11.01.2007 14:15
Frage zu Aufklapp-Menü mit CSS Hobbyuser HTML, XML und CSS 8 12.08.2006 18:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:47 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44