Autor |
Nachricht |
zweitaccount
Threadersteller
Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 14.10.2011 23:29
Titel mysql-> vorherigen+nächsten eintrag, alphabetisch haben w |
|
|
Hallo Leute,
angenommen ich habe folgende Tabelle:
id | cat | name
1 | 2 | Abc-Verein
2 | 9 | Zuerichabzock
3 | 9 | Bankster
4 | 7 | Superstar
5 | 6 | Alphornmanufactum
6 | 9 | Banditos
7 | 9 | Barimmergut Ltd.
Auf einer Seite gebe ich beispielsweise den Eintrag id:3 -> Name: Bankster aus.
Ich habe also dort die `id`, `cat` und den `name`.
Jetzt will ich zusätzlich jeweils - alphabetisch - den Eintrag vor und dahinter
in der selben category haben. Wobei die categorie das kleinste Problem wäre.
Also im Beispiel wäre das gewünschte Ergebnis
id:6|cat:9|name:Banditos und id:7|cat:9|name:Barimmergut.
Wie komme ich per sql da hin? Mit between komme ich nicht weiter,
weil ich ja dem vorherigen und den nächsten übergeben müsste:
SELECT *
FROM `rex_article`
WHERE name BETWEEN 'Bankster%' AND 'Bankster%'
ORDER BY `name`
LIMIT 0, 3
Mit einer Wildcard komme ich nicht weiter, weil das gar
nix zurückgibt (mysql, xampp)
SELECT *
FROM `rex_article`
WHERE name LIKE '[abc]%'
ORDER BY `name`
LIMIT 0, 3
Und selbst wenn, wäre das auch Quark.
Jetzt dachte ich mir ich könnte die Tabelle komplett abrufen
und nochmals in sich selber joinen - wobei der join nur ein
Ergebnis bringt - also das bekannte - und daraufhin die ergebnisse
der erste Tabelle eingrenzt. Nur hakts da bei mir völlig aus.
Gibts da vlt. eine viel einfachere Variante? Oder muß ich echt
hergehen und alle abholen und dann foreach durchrattern und mir
dann den previous und den nächsten Eintrag rausklauben?
|
|
|
|
|
DerM
Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht:
|
Verfasst Sa 15.10.2011 09:50
Titel
|
|
|
Also ich hab's mir jetzt 3 mal durchgelesen und immer noch keinen blassen Schimmer was Du wirklich möchtest?
Verstehe ich das Richtig anhand deines Titels, Du stellst immer nur ein Produkt dar, möchtest aber dann auf der jeweils folgenden Seite das nächste Produkt der gleichen Kategorie haben?
Oder stellst Du das einfach nur tabellarisch da, und möchtest die Kategorie jeweils als Überschrift nutzen?
|
|
|
|
|
Anzeige
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
|
|
|
|
zweitaccount
Threadersteller
Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Sa 15.10.2011 13:29
Titel
|
|
|
DerM hat geschrieben: | Also ich hab's mir jetzt 3 mal durchgelesen und immer noch keinen blassen Schimmer was Du wirklich möchtest?
Verstehe ich das Richtig anhand deines Titels, Du stellst immer nur ein Produkt dar, möchtest aber dann auf der jeweils folgenden Seite das nächste Produkt der gleichen Kategorie haben?
Oder stellst Du das einfach nur tabellarisch da, und möchtest die Kategorie jeweils als Überschrift nutzen?
|
Ja sorry - ich weiß nicht wie ichs einfach in Worte fassen soll.
Ich will auf einer Artikel-Detailseite unten den vorherigen und den nächsten
Artikel der selben Categorie anteasern - und zwar alphabetisch vom Titel her
(ich weiß an der Stelle also die Id des Artikels, die Kategorie und den Titel)
Also praktisch so - außer das ich halt die Likes nicht weiß
SELECT *
FROM `rex_article`
WHERE `id`= $myArticleId
OR `name` LIKE '$alphabetischVorherigerName'
OR `name` LIKE '$alphabetischNächsterName'
ORDER BY `name`
LIMIT 0, 3
@bacon
Ein Union könnte schon Sinn machen, nur was sollte ich denn
als Where-Statement schreiben?
Oder geht das vielleicht auch einfach nicht - und ich zerbrech mir
den Kopf umsonst?
|
|
|
|
|
DerM
Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht:
|
Verfasst Sa 15.10.2011 13:49
Titel
|
|
|
Wenn Du die Artikel der selben Kategorie anteasern willst ist das doch kein Problem..
Du musst doch nur noch mal nen Query starten, mit der aktuellen Kategorien ID und diese dann alphabetisch sortieren.
Oder versteh ich das jetzt immer noch falsch?
|
|
|
|
|
zweitaccount
Threadersteller
Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Sa 15.10.2011 14:05
Titel
|
|
|
Ja schon, momentan hole ich mir auch alle, sortiert nach `name`
und gehe da dann foreach drüber und wenn ich die aktuelle `id`
gefunden habe, nehme ich mir - sofern vorhanden - den vorherigen
und den nächsten Articel und gebe die aus.
Aber ich bilde mir ein, man könnte das ja schon per sql machen,
so das mir als Result von vornherein nur die beiden Artikel
zurückgegeben werden. Dann spare ich mir das foreach-rumgesuche.
---
Und eigentlich will ich es dann noch komplizierter, falls es keinen
nächsten Artikel mehr geben sollte, soll der insgesamt erste Artikel
erscheinen und vice versa -> falls es keinen vorherigen Artikel gibt,
soll der insgesamt letzte Artikel wieder erscheinen.
|
|
|
|
|
DerM
Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht:
|
Verfasst Sa 15.10.2011 14:29
Titel
|
|
|
Dann zeig doch mal wie Du das bisher ausliest.
Ich checks irgendwie net so ganz, aber wenn Du mal die Source zeigst, kann ich mir das mal zu Gute führen!
|
|
|
|
|
qualidat
Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht:
|
Verfasst Sa 15.10.2011 15:17
Titel
|
|
|
Die Anzahl der SQL-Statements dürfte bei der heutigen Leistungsfähigkeit der Server ziemlich egal sein. Also suchst du zunächst den Artikel selber, dann einen der größer ist und limitierst auf eins und dann einen der kleiner ist und limitierst auf eins. Das ist zwar wenig elegant aber übersichtlich und einfach.
Möglicherweise lässt sich durch Gehirnakrobatik auch ein ziemlich kompliziertes Statement finden, dass dies Alles in einem löst. Ich als Anwendungsprogrammierer lehne solche Supertricks aber ab, sofern es nicht wirklich um Millisekunden geht. Denn wenn du in 1 Jahr nochnal in de Code guckst, guckst du wie das berühmte Schwein ins Uhrwerk und auch kein Fremder kann den Code mehr warten.
Zuletzt bearbeitet von qualidat am Sa 15.10.2011 15:17, insgesamt 1-mal bearbeitet
|
|
|
|
|
|
|
|
Ähnliche Themen |
[PHP] Runden auf nächsten bzw. vorherigen 5er Wert
PHP/MYSQL lezten Eintrag filtern
(PHP & mySQL) Gästebuch: Eintrag schreiben geht nicht
teil von der zeichnung vom vorherigen bild im aktuellen key?
[PHP] alphabetisch ordnen
Alphabetisch geordnete Liste - wie?
|
|