liste mit a-z ...

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • liste mit a-z ...

    hi!

    ich habe auf meiner seite ein linkleiste von a-z, bei der bei jedem buchstaben die filme gelistet kommen, die mit dem jeweiligen buchstaben beginnen.

    soweit so gut und kein problem. nun möchte ich aber, dass alle filme, wie zb "der herr der ringe" sowohl bei "D" (was normal wäre) als auch bei "H" gelistet werden.

    ich hatte bereits eine lösung, die auch funktioniert hat, allerdings wurden die datensätze dann nicht richtig sortiert, weil ich mit php nachgeholfen habe und das ganze nicht gleich in der selectabfrage gemacht wurde ...

    hier komme ich dann auch bereits zu meiner frage ...

    PHP-Code:
    SELECT from dvd WHERE 'Titel' like 'zB H%' 
    So ungefähr schaut meine bisherige Selectabfrage aus ...

    wie kann ich nun einbauen, das "der, die, das und the" auch berücksichtigt werden, wenn nach dem jeweiligen Artikel der passende gesuchte Buchstabe, in dem Beispielfall 'H' vorkommt?


    ich dachte eventuell so ...

    PHP-Code:
    SELECT from dvd WHERE
    'Titel' like 'H%'
    OR LEFT('Titel',4like 'Der H%' 
    OR LEFT('Titel',4like 'Das H%' 
    OR LEFT('Titel',4like 'Die H%'
    OR LEFT('Titel',4like 'The H%' 
    das würde ja bereits funktionieren, allerdings fehlt mir dann noch die richtige sortierung ... d.h. der herr der ringe sollte dann unter dem buchstaben "h" auch mit "h" sortiert werde und nicht wie im Titel gespeichert mit "d" ...

    ... und, natürlich hätte ich dann gerne, dass der Artikel hinter dem Titel angezeigt wird, in etwa so ... "herr der ringe, der"

    so, ich hoffe, ich konnte mein problem halbwegs erklären und noch mehr hoffe ich, dass ihr mich auf einen lösungsweg bringen könnt ... oder aber, vielleicht ist es ja 'nur' mit einer selectabfrage alleine gar nicht möglich?!

    vielen dank schon mal, jeichi

    ps: die seite, für die ich das script dann benutzen möchte ... http://www.filmempfehlung.com/2_A

  • #2
    Wie wäre denn sowas:

    PHP-Code:
    SELECT *, IF(
    LEFT(Titel1) = 'H',
        
    Titel,
        
    CONCAT(
            
    RIGHT(TitelCHAR_LENGTH(Titel)-4),
                    
    ', ',
            
    LEFT(Titel4)
        )
    ) AS 
    order_by

    from dvd WHERE
    Titel like 
    'H%'
    OR LEFT('Titel',4like 'Der H%' 
    OR LEFT('Titel',4like 'Das H%' 
    OR LEFT('Titel',4like 'Die H%'
    OR LEFT('Titel',4like 'The H%'
    ORDER BY
    order_by 
    Ungetestet ...

    Edit: "SELECT *" ist natürlich scheiße. Ich hoffe, dass das von dir nur Beispielshalber so aussah
    Zuletzt geändert von unset; 09.11.2007, 17:31.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Original geschrieben von unset
      Wie wäre denn sowas:

      PHP-Code:
      SELECT *, IF(
      LEFT(Titel1) = 'H',
          
      Titel,
          
      CONCAT(
              
      RIGHT(TitelCHAR_LENGTH(Titel)-4),
                      
      ', ',
              
      LEFT(Titel4)
          )
      ) AS 
      order_by

      from dvd WHERE
      Titel like 
      'H%'
      OR LEFT('Titel',4like 'Der H%' 
      OR LEFT('Titel',4like 'Das H%' 
      OR LEFT('Titel',4like 'Die H%'
      OR LEFT('Titel',4like 'The H%'
      ORDER BY
      order_by 
      Ungetestet ...

      Edit: "SELECT *" ist natürlich scheiße. Ich hoffe, dass das von dir nur Beispielshalber so aussah
      danke für deine antwort ...

      so funktioniert es leider nicht - zum einen habe ich schon einen fehler gemacht ... unten die ganzen left('titel',4) gehört auf 4 auf 5 gesetzt, geht aber trotzdem nicht ...

      der ansatz schien schon recht gut, aber gehen tuts leider nicht ... das ergebnis schaut komplett gleich aus, wie zuvor bei meiner abfrage?!

      dein if sagt ja, wenn der 1 buchstabe H ist, dann soll er das mit dem artikel machen, oder? - aber das wäre ja falsch?! habs auch mit ungleich H versucht, klappt aber auch nicht, irgendwie ignoriert die abfrage die if-abfrage komplett ... kommt nie zum tragen?!

      Kommentar


      • #4
        Ne, die Lösung ist so oder so vollkommen unbrauchbar, außer du willst einen DB-Server nur dafür haben um diese eine Seite zu kreieren...

        Ich würde jetzt spontan eine neue Tabelle anlegen, wo du die Film-ID mit beliebigen Anfangsbuchstaben drin speicherst, also z.B. wenn du den Film "Der Herr de..." hast mit ID=2, dann legst du zwei Datensätze
        2 D
        2 H
        an. Dann kannst du nämlich ganz einfach ein
        SELECT vid_id FROM neue_Tabelle WHERE Buchstabe = "D";
        machen, und das ganze dann wiederum mit der Video-Tabelle joinen. Wenn die Buchstaben-Spalte dann noch ein Enum ist, ist das ganze unglaublich schnell.
        Dann musst du nur manuell, oder per Algorithmus, die neue Tabelle befüllen lassen.

        Aber von der LIKE-Lösung würde ich in jedem Fall Abstand nehmen. Das sind Full-Selects...

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar

        Lädt...
        X