Heim >Backend-Entwicklung >PHP-Tutorial >Hilfe: Wie findet MySQL Ergebnisse basierend auf der angegebenen ID-Reihenfolge?

Hilfe: Wie findet MySQL Ergebnisse basierend auf der angegebenen ID-Reihenfolge?

WBOY
WBOYOriginal
2016-10-10 11:56:231167Durchsuche

Liebe Meister, jetzt bin ich auf ein Problem gestoßen und brauche eure Hilfe.

Es gibt die folgenden zwei Tabellen
Beitragstabelle: Artikeltabelle.
Aufzeichnungstabelle: Aufzeichnungstabelle, die zum Aufzeichnen der Lesereihenfolge des Benutzers verwendet wird.

Die Datensatztabelle verwendet ein Feld postid, um die Primärschlüssel-ID der Beitragstabelle entsprechend der Reihenfolge aufzuzeichnen, in der der Benutzer Artikel liest, dh der Fremdschlüssel von record.postid ist post.id.

Jetzt müssen wir die Artikel in der Post-Tabelle basierend auf der Post-ID in der Datensatztabelle finden. (Angenommen, die Lesereihenfolge lautet: „Artikel 1, Artikel 2, Artikel 2, Artikel 3, Artikel 3“ erlaubt wiederholte Artikel.)
Ich habe mit

begonnen
<code>SELECT *
FROM post
WHERE id IN (postid1,postid2,postid2,postid3,postid3);</code>

In den Suchergebnissen können nur Artikel mit postid1, postid2, postid3 gefunden werden.

Die Geschäftslogik, die wir jetzt wollen, ist:
1: Artikel in der Beitragstabelle basierend auf den Lesedatensätzen des Benutzers finden.
2: Vervielfältigung ist erlaubt.

Zum Beispiel lautet die Lesereihenfolge der vom Benutzer gelesenen Artikel: „Artikel 1, Artikel 2, Artikel 2, Artikel 3, Artikel 3“, und das Ergebnis der Suche in der Beitragstabelle lautet: post.id1, ​​​​post.id2, post.id2, post.id2,post.id3.

Hinweis: Erwägen Sie die Verwendung einer FOR-Schleife

<code> for (.....){
      ...
      变量 数组x;
      数组x添加 SELECT * FROM post WHERE id = postidx;
      ....
 }</code>

Aber ich mache mir Sorgen um die Effizienz.

Antwortinhalt:

Liebe Meister, jetzt bin ich auf ein Problem gestoßen und brauche eure Hilfe.

Es gibt die folgenden zwei Tabellen
Beitragstabelle: Artikeltabelle.
Aufzeichnungstabelle: Aufzeichnungstabelle, die zum Aufzeichnen der Lesereihenfolge des Benutzers verwendet wird.

Die Datensatztabelle verwendet ein Feld postid, um die Primärschlüssel-ID der Beitragstabelle entsprechend der Reihenfolge aufzuzeichnen, in der der Benutzer Artikel liest, dh der Fremdschlüssel von record.postid ist post.id.

Jetzt müssen wir die Artikel in der Post-Tabelle basierend auf der Post-ID in der Datensatztabelle finden. (Angenommen, die Lesereihenfolge lautet: „Artikel 1, Artikel 2, Artikel 2, Artikel 3, Artikel 3“ erlaubt wiederholte Artikel.)
Ich habe mit

begonnen
<code>SELECT *
FROM post
WHERE id IN (postid1,postid2,postid2,postid3,postid3);</code>

In den Suchergebnissen können nur Artikel mit postid1, postid2, postid3 gefunden werden.

Die Geschäftslogik, die wir jetzt wollen, ist:
1: Artikel in der Beitragstabelle basierend auf den Lesedatensätzen des Benutzers finden.
2: Vervielfältigung ist erlaubt.

Zum Beispiel lautet die Lesereihenfolge der vom Benutzer gelesenen Artikel: „Artikel 1, Artikel 2, Artikel 2, Artikel 3, Artikel 3“, und das Ergebnis der Suche in der Beitragstabelle lautet: post.id1, ​​​​post.id2, post.id2, post.id2,post.id3.

Hinweis: Erwägen Sie die Verwendung einer FOR-Schleife

<code> for (.....){
      ...
      变量 数组x;
      数组x添加 SELECT * FROM post WHERE id = postidx;
      ....
 }</code>

Aber ich mache mir Sorgen um die Effizienz.

SELECT P.*
FROM Post P
LEFT JOIN Record R ON R.PostID = P.ID
ORDER BY R.ID ASC

Die Datensatztabelle zeichnet die Lesereihenfolge auf, daher muss sie entsprechend der Reihenfolge der Datensatztabelle sortiert werden

kann eine Idee liefern: Verwenden Sie in, um Daten aus der Datenbank abzurufen, und verwenden Sie map, um eine entsprechende Beziehung zu map.put(postid, post) herzustellen. Nehmen Sie es dann in der Reihenfolge der IDs heraus und stellen Sie die erforderlichen Datentypen zusammen

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn