Announcement

Collapse
No announcement yet.

JOIN Befehl

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • JOIN Befehl

    Hallo liebe Community,

    ich erstelle hier eine Datenbank + FrontEnd + Backend für einen Onlinebuch-Shop (im weitesten Sinne) und habe eine Frage zu dem JOIN Befehl in MySql.

    Irgendwie muss ich den Sql-Befehl einmal sehen, damit ich ihn richtig verstehe. Bis jetzt schaff ich meist durch ausprobieren und tutorials lesen auf die Lösung zu kommen, aber irgendwie werd ich hiermit nicht fertig....

    Also, es geht um folgendes:

    Es soll eine Suche eingebaut werden, welche eine Stichwortsuche oder eine erweiterte Suche (Titel, Untertitel, Jahr, Autor, Kategorie) beinhaltet.

    Wäre ja im Prinzip auch supereasy, das ganze hat nur einen Haken:

    Kategorie und Autor hat eine eigene Tabelle, zur Vereinfachung hier die 5 Tabellen in Kürze:

    tbl_books
    id, title, subtitle

    tbl_categories
    id, cname

    tbl_authors
    id, name, firstname, function

    link_categories
    id, bookid, catid

    link_authors
    id, bookid, authorid

    In der Suche wird Kategorie und Autor über ein Select mit der id von tbl_category bzw. tbl_authors ausgewählt



    Angenommen jemand sucht nun nach dem Titel "Gesetz" in der Kategorie "Mittelstandsmanagement", dann muss da ja auf jeden Fall ein JOIN rein, sehe ich das richtig?

    Da es über 2 Tabellen geht, müssten doch sogar gleih 2 JOINS rein, wie kann man sowas denn basteln?

    Also ich möchte jetzt hier nicht nach einem fertigen Code fragen, helft mir nur auf die Sprünge, das würde schon reichen

    ZIEL: Ein SELECT-Befehl, welcher jeden Buchtitel mit jedem Autor und jeder Kategorie auswirft, welche natürlich auch zueinander passen... (in der entsprechenden link_* Tabelle festgelegt)

    Ich probier im Hintergrund auch mal weiter, muss doch zu schaffen sein....

    MfG, PR

    /edit

    glaub ich habs schon... :/
    aber unelegant ohne JOINS, einfach alles auswerfen und das nützliche raussuchen...
    SELECT * FROM `tbl_books`, `link_authors`, `link_categories` WHERE ...."
    (WHERE wird dynamisch gesetzt, je nach dem was der user eingegeben hat)

    gehts besser?
    Zuletzt editiert von PoketRockets; 26.11.2010, 11:42.

  • #2
    Hallo,

    evtl. ist ja die Volltext-Suche eine Alternative.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Originally posted by Falk Prüfer View Post
      Hallo,

      evtl. ist ja die Volltext-Suche eine Alternative.

      Gruß Falk
      Werd ich mir anschauen, Vielen Dank dafür!

      meld mich dann gleich nochmal zurück

      Comment


      • #4
        So, die Suche habe ich nun ohne JOIN umgesetzt (hab mich erfolgreich davor gedrückt...)

        Alles funktioniert optimal, werde aber nich drumherum kommen, mich demnächst dennoch damit zu beschäftigen...

        Hier vier Bilder zu der Funktionalität:



        und man kommt auf folgende Trefferseite:


        Hier ist absichtlich alles doppelt, da ich in der datenbank zu testzwecken ein paar datensätze kopiert habe... ansonsten wird natürlich kein Datensatz doppelt angezeigt...


        Der Filter lässt sich natürlich weiterhin setzen


        Alle Filterungen werden berücksichtigt


        Der dahintersteckende SQL befehl erweitert sich um WHERE attibute, je nach dem welche/wieviele inputs bedient wurden... Per GET übergeben, damit zurück und F5 kein "problem" darstellt.

        Wenn man als Stichwort suche z.B. "Das Haus" eingibt, also mehrere wörter, so wird ein array mit einem leerzeichen als seperator verwendet, um jedes einzelne wort zu suchen.

        PHP Code:
        if(isset($_GET['free'])) {
            if(
        substr_count($_GET['free'], " ")) {
                
        $sfree explode(" "$_GET['free']);
            } else {
                
        $sfree[0] = $_GET['free'];    
            }
        }

        // [...] $where wird dynamisch erstellt, je nach dem welche inputs benutzt wurden.
        // im array $result[] werden die ergebnisse in form von book IDs gesammelt um diese anschließend auszugeben, dadurch können dopplungen ausgefiltert werden.

        foreach ($sfree as &$value) {
            
        $db->query("SELECT * FROM `tbl_books` WHERE ".$where);
            
            while(list(
        $id) = $db->data()) {
                
                if(!
        in_array($id$result)) {
                    
        $result[] = $id;
                }
            }        

        Anmerkung: Es gibt mit sicherheit suabere Lösungen, aber im Moment geht es eher darum das System schnell aufzubauen...

        Da es am Anfang eh nur 25 Bücher geben wird, sollte das so erstmal reichen...

        Bin für Verbesserungsvorschläge aber immer offen!!

        LG, PoketRockets
        Zuletzt editiert von PoketRockets; 29.11.2010, 15:10.

        Comment

        Working...
        X