2016-07-26 18 views
2

Ich benutze Laravel Framework. Ich habe Tausende von Datensätzen, wo täglich neue Datensätze hinzugefügt werden. Was ich erreichen möchte, ist Schlüsselwörter aus der Datenbank von kürzlich eingefügten Daten zu alten zu suchen (das heißt, zuerst nach zuletzt eingefügter ID und vorletzter eingefügter ID usw. suchen). Das mag seltsam sein, aber ich brauche das. Der Hauptzweck ist, meine Suche schneller zu machen. Ich muss mehrere Schlüsselwörter (in ungefähr 5/6 Spalten) suchen, die übereinstimmten. Nach meinem Wissen ist die Indizierung all dieser Suchspalten auch eine Option. Wenn es eine bessere Lösung gibt, möchte ich mich bewerben. Buchungscodes, die ich ausprobiert habe, wären großartig, aber ich habe keine zu versuchen.mysql Suche von umgekehrter Reihenfolge

würde von Anfang Tabelle

Dieses einfach suchen
$checkDuplicate = \Guest::where('uuid', $uuid) 
          ->where('first_name', 'abc') 
          ->where('middle_name', 'def') 
          ->where('last_name', 'ghi') 
          ->where('age', '50') 
          ->where('hotel_name', 'mno') 
          ->where('check_in', 'xxx') 
          ->where('check_out', 'yyy') 
          ->first(); 

Jede Hilfe würde geschätzt. Danke

Antwort

0

Wenn Sie eine automatisch inkrementierende id Spalte haben (was Sie sollten), können Sie einfach in absteigender Reihenfolge wie folgt bestellen: ->orderBy('id', 'desc'). Sie können auch ein Limit für Datensätze festlegen, die abgerufen werden sollen.

More info here in Laravel Docs.

+0

@Alilshaq, nach dem Dokument: ''Die OrderBy-Methode ermöglicht es Ihnen, das Ergebnis der Abfrage nach einer bestimmten Spalte zu sortieren'. Ich muss suchen, aber das Ergebnis nicht sortieren. :) – vijayrana

+0

Sie haben bereits alle Suchspalten als 'where' hinzugefügt. Wenn Sie diese nach absteigender ID sortieren, erhalten Sie zuerst den zuletzt eingefügten Datensatz aus Ihren Ergebnissen. – AliIshaq

0

Für mich scheint es, als ob Sie Ihre Datenstruktur für die Abfragen optimieren müssen, die Sie dagegen ausführen müssen. Sie haben eine Spalte für den Hotelnamen, in der die Datenredunanz angefordert wird. Haben Sie ein vorgewähltes Sortiment von Hotels? Zum Beispiel, wenn Sie suchen, wäre es sinnvoll, das Hotel in einem Dropdown-Menü auszuwählen und mit einem Fremdschlüssel (id in einer hotels Tabelle) statt mit einem Varchar (was viel schneller ist) abzufragen?

Wenn das Redesign keine Option ist, ist es besser, Indizes hinzuzufügen, wie Sie selbst angegeben haben. Aber bedenken Sie, dass zu viele Indizes auch schlecht sind. Ich glaube nicht, dass Sie MySQL zwingen können, Daten mit einer bestimmten Strategie abzufragen (zB mit dem neuesten beginnen). Das andere Problem hier ist, dass selbst wenn es Ihnen gelingt, MySQL dazu zu bringen, das Neueste zuerst abzufragen, würde es trotzdem den Rest des Datensatzes durchsuchen wollen, um zu dem Schluss zu kommen, dass es keine Ergebnisse mehr gibt (wie Sie es nicht haben) eine Grenze).

+0

Danke, ich denke ich habe eine Idee davon bekommen – vijayrana

Verwandte Themen