2016-04-05 7 views
0

direkt für den Code gehen.FIND_IN_SET mit Limit-Offset

Benutzer Tabelle

+----+------------------+ 
| id | username   | 
+----+------------------+ 
| 1 | becker.cornelius | 
| 2 | claudine29  | 
| 3 | dion37   | 
| 4 | zkozey   | 
| 5 | kasandra59  | 
+----+------------------+ 

Listen Tabelle

+----+---------------------------+ 
| id | name      | 
+----+---------------------------+ 
| 1 | List 1      | 
| 2 | List 2      | 
| 3 | List 3      | 
| 4 | List 4      | 
| 5 | List 5      | 
+----+---------------------------+ 

lists_data Tisch

+-----+---------+----------------------------------------------------------------+ 
| id | list_id | user_id              | 
+-----+---------+----------------------------------------------------------------+ 
| 421 |  4 | 1,2,3,503433,707152,603114,342531,414463,977165    | 
+-----+---------+----------------------------------------------------------------+ 

data colum meine 1 Million Benutzer enthalten. mein Code Nach

ist
select users.id, email, mobilenumber, firstname, surname, created_at 
from users 
inner join lists_data on find_in_set(users.id,lists_data.user_id) > 0 where lists_data.list_id = 97 

Above Code funktioniert, ist nur Problem langsam und ich kann nicht Paginierung verwenden,

ich viele Methoden ausprobiert habe. keiner von ihnen funktioniert wie erwartet.

BTW, ich kann die Tabelle lists_data nicht normalisieren, da sie Millionen von Datensätzen pro Liste enthalten kann.

+0

Warum haben Sie die Spalte "CSV" in der Junction-Tabelle? – lad2025

+0

'CSV'-Spalte? woher? – Mifas

+0

'user_id' in' lists_data' Tabelle (dh '1,2,3,503433,707152,603114,342531,414463,977165') – lad2025

Antwort

0

Sie verwenden die falsche Datenstruktur für relationale Datenbanken. Ihre lists_data Tabelle sollte Spalten für list_id und user_id (Singular) haben. Die Beispielzeile würde aus mehreren Zeilen bestehen:

id list_id user_id 
    1  97   1 
    2  97   2 
    3  97   3 
    4  97  503433 
    . . . 

Dies wird als Junction-Tabelle bezeichnet. Und obwohl SQL größer ist, ist es viel einfacher, mit solchen Tabellen zu arbeiten.

+0

Ja, das kann, aber Problem ist, wenn eine Liste 1 Million Benutzer hat, würde es 1 Million Datensätze in 'lists_data' Tabelle, – Mifas

+0

@Mifas. . . Und was ist dein Sinn? –

+0

Daten einfügen wird schmerzhaft sein, DB-Größe – Mifas

Verwandte Themen