mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 02:43 Benutzername: Passwort: Auto-Login

Thema: mysql-> vorherigen+nächsten eintrag, alphabetisch haben will vom 14.10.2011


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> mysql-> vorherigen+nächsten eintrag, alphabetisch haben will
Seite: 1, 2  Weiter
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

Antworten mit Zitat Zum Seitenanfang

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?

* Keine Ahnung... *
  View user's profile Private Nachricht senden
DerM

Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht: Männlich
Verfasst Sa 15.10.2011 09:50
Titel

Antworten mit Zitat Zum Seitenanfang

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?

Glaskugel
  View user's profile Private Nachricht senden
Anzeige
Anzeige
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 15.10.2011 09:52
Titel

Antworten mit Zitat Zum Seitenanfang

Geraten: http://dev.mysql.com/doc/refman/5.1/de/union.html
  View user's profile Private Nachricht senden
zweitaccount
Threadersteller

Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 15.10.2011 13:29
Titel

Antworten mit Zitat Zum Seitenanfang

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?

Glaskugel


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ß *zwinker*

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?
  View user's profile Private Nachricht senden
DerM

Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht: Männlich
Verfasst Sa 15.10.2011 13:49
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
zweitaccount
Threadersteller

Dabei seit: 25.01.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 15.10.2011 14:05
Titel

Antworten mit Zitat Zum Seitenanfang

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.
* Wo bin ich? *
  View user's profile Private Nachricht senden
DerM

Dabei seit: 18.01.2009
Ort: -
Alter: 42
Geschlecht: Männlich
Verfasst Sa 15.10.2011 14:29
Titel

Antworten mit Zitat Zum Seitenanfang

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!
  View user's profile Private Nachricht senden
qualidat

Dabei seit: 14.09.2006
Ort: Eichwalde bei Berlin
Alter: 63
Geschlecht: Männlich
Verfasst Sa 15.10.2011 15:17
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ä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?
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.