MySQL + Select Querry (ORDER BY)

XEMO

Mitglied
Ich hab eine Tabelle mit mehreren Keys,
Key1 hat diverse Values (Strings).

Nun möchte ich die ausgabereihenfolge (von Key1) angeben. :suspekt:

Bsp.

SELECT * FROM categories ORDER BY 'grp' {REIHENFOLGE=> kekse, kuchen, backwaren}

Wie muss der Querry heissen? Ich hab keine Ahnung :(
 
Das löst mein Problem nicht.
Ich will nicht nach Spalten Sortieren, sondern nach Zeilen(rows)!!

Weiteres bsp.;
Eine Spalte:
Values:
honig
honig
honig
marmelade
marmelade
butter
marmelade
honig
butter
butter
butter
butter
marmelade
marmelade
marmelade
butter

Viele Weitere Spalten.... (NICHT ZEILEN)

Ich brauch jetzt eine SELECT Anweisung in der ich explizit festlegen kann das ich zuerst alle marmelade, dann alle butter und dann alle honig-rows (nacheinander) ausgeben kann.
 
Zuletzt bearbeitet:
Wenn ich Dich richtig verstanden habe, dann geht das meines Wissens nur mit einem Hilfswert.
Hier ein Beispiel:
Code:
SELECT
Spalte1,
Spalte2,
...,
IF(Spalte1 LIKE 'marmelade',1,
  IF(Spalte1 LIKE 'butter',2,
    IF(Spalte1 LIKE 'honig',3,4)
  )
) AS reihenfolge
FROM Tabelle
ORDER BY reihenfolge ASC
Gruß hpvw
 
Sorry, dann ist mir nicht ganz klar wie deine Tabelle aussehen soll.

Poste doch mal einen Dump für das CREATE und einige INSERT Statements, dann schicke ich dir ein geeignetes Query.

So wie ich das verstanden habe, brauchst du einfach ein ORDER BY Spalte, wobei "Spalte" die Spalte mit honig und marmelade usw. ist. Das geht allerdings nur Alphabetisch, andernfalls müsstest du ensprechende IDs vergeben (für marmelade=1, butter=2, honig=3) dann könntest du nach ID sortieren. Den Namen würdest du dann in einer zweiten Tabelle haben:

Code:
ID    Name
1     marmelade
2     butter
3     honig

das wäre dann die saubere Lösung, Stichwort "Normalisierung".

Gruß

Marian
 
Naja wenigstens Stimmt das Zitat in meiner Signatur :)

Hier der Dump;

--
-- Tabellenstruktur für Tabelle `fruehstueck`
--

CREATE TABLE `fruehstueck` (
`id` int(5) NOT NULL auto_increment,
`grp` varchar(150) collate latin1_general_ci NOT NULL default '',
`catname` varchar(150) collate latin1_general_ci NOT NULL default '',
`catdef` text collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=6 ;

--
-- Daten für Tabelle `fruehstueck`
--

INSERT INTO `fruehstueck` (`id`, `grp`, `catname`, `catdef`) VALUES (1, 'honig', 'waldblütenhonig', 'feine honigart die speziell in der grossstadt zu finden ist');
INSERT INTO `fruehstueck` (`id`, `grp`, `catname`, `catdef`) VALUES (2, 'honig', 'sommerblütenhonig', 'gibts immer saisonal im sommer');
INSERT INTO `fruehstueck` (`id`, `grp`, `catname`, `catdef`) VALUES (3, 'marmelade', 'himbeermarmelade', 'aromatische hochland marmelade');
INSERT INTO `fruehstueck` (`id`, `grp`, `catname`, `catdef`) VALUES (4, 'marmelade', 'pfirsichmarmelade', 'gewonnen aus birnen');
INSERT INTO `fruehstueck` (`id`, `grp`, `catname`, `catdef`) VALUES (5, 'honig', 'akazienhonig', 'was ganz feines');

...ganz viele weiter Sachen vom fruehstueckstisch

Nun will ich zuerst alle honigsorten ausgeben dann alle frühstückeiersorten, dann alle marmeladen etc.

Ich hoffe jetzt ist es verständlich. :)
 
@hpvw; Ich hab mir dein Vorschlag angesehen, der dürfte eigentlich auch funktionieren, nur weiss ich noch nicht ob das die beste Möglichkeit ist. :confused:
 
XEMO hat gesagt.:
@hpvw; Ich hab mir dein Vorschlag angesehen, der dürfte eigentlich auch funktionieren, nur weiss ich noch nicht ob das die beste Möglichkeit ist. :confused:
Nein, ist es nicht. die beste Möglichkeit hat Marian angesprochen. In Deinem Fall würde ich ihre Tabelle evtl. noch um ein Attribut erweitern, in dem Du die Sortierreihenfolge durch ein int festlegst, damit Du nicht auf die richtige Reihenfolge beim Eintragen und die ID Rücksicht nehmen musst.

Gruß hpvw
 
Nun will ich zuerst alle honigsorten ausgeben dann alle frühstückeiersorten, dann alle marmeladen etc.

Code:
select * from fruehstueck order by grp

damit kommt dann erst "honig" dann "marmelade".

Mit deinem Tabellen-Design geht das dann nur alphabetisch.

Hier mein Vorschlag für eine Zusatz-Tabelle:

Code:
CREATE TABLE `sorten` (
  `id` int(11) default '0',
  `sorten_name` char(40) default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1

Bei der Originaltabelle "fruehstueck" müsstest du "grp" als INTEGER-Feld mit einer ID versehen. Statt "honig" dann eine 1, statt "marmelade" eine 2 eintragen. Dann kannst du folgendermaßen abfragen:

Code:
select sorten_name, catname 
from fruehstueck, sorten
where fruehstueck.grp = sorten.id
order by fruehstueck.grp

Die ID im "grp" Feld müsste dann natürlich immer so gewählt werden, wie du es sortiert haben willst. Die Tabelle "sorten" enthält dann jeweils die ID und den Namen.

Gruß

Marian


Gruß

Marian
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück