2016-08-05 7 views
0

Ich möchte meinen Benutzern erlauben, einen Warenkorb von Obst zu machen, sondern auch die Möglichkeit, sie so zu bestellen, wie sie es möchten. Ich werde versuchen, mein Problem auf die einfachste Weise zu erklären.MySQL - Benutzerdefinierte Bestellung für jeden Benutzer

Eine Tabelle "Benutzer" enthält die Benutzer mit einem Auto-Inkrement-ID-Feld.

----------------- 
| id | username | 
----------------- 

Ich habe eine Tabelle "Früchte", die Früchte enthält.

-------------- 
| id | fruit | 
-------------- 

Und ich möchte, um Benutzern zu ermöglichen, einen Wagen enthält, Früchte zu haben, so habe ich den Tisch "Warenkorb":

--------------------------- 
| id | user_id | fruit_id | 
--------------------------- 

So zum Beispiel,

ich in "Früchte" haben :

-------------- 
| 1 | Banana | 
| 2 | Apple | 
| 3 | Orange | 
-------------- 

Wenn 1 der Benutzer eine von jeder möchte ich in "Warenkorb"

hätte
--------------------------- 
| id | user_id | fruit_id | 
--------------------------- 
| 1 | 1 |  1 | 
| 2 | 1 |  2 | 
| 3 | 1 |  3 | 
--------------------------- 

Also, wenn ich ausführen:

SELECT fruit_id FROM cart WHERE user_id = 1; 

Ich hätte:

------------ 
| fruit_id | 
------------ 
|  1 | 
|  2 | 
|  3 | 
------------ 

Aber ich möchte, dass meine Benutzer durch eine jQuery Sortable Array ermöglichen, seine Wagen neu zu ordnen, so dass MySQL sortieren sie für ihn.

Ich von einer Lösung, die nicht der beste Weg scheint; Remove die "Warenkorb" -Tabelle mit der Benutzer-ID und eine Zeichenfolge von Fruit_id muss ich analysieren. Die zweite Möglichkeit war, die Einträge zu löschen und sie in der richtigen Reihenfolge neu einzugeben, so dass die Sortierung nach ID sie sortiert, aber ich bin auch nicht wirklich glücklich mit dieser Situation.

Kennen Sie einen besseren/saubereren Weg?

Vielen Dank für einen Einblick/Kommentar/Wissen.

+1

Entweder eine neue Spalte in Ihren Warenkorb Tabelle sort_order Namen hinzufügen. Oder führen Sie die Sortierung in Code durch: SELECT ObstID FROM Warenkorb WHERE UserID = 1 Auftrag von Find_in_set (fruit_id, '3,1,2') ' –

Antwort

1

SQL-Tabellen repräsentieren ungeordnet Sets. In ähnlicher Weise sind die Ergebnissätze ungeordnet, es sei denn, Sie verwenden eine ORDER BY.

Sie scheinen zwei Möglichkeiten zu haben. Fügen Sie eine Spalte zur Tabelle hinzu, sagen Sie sort_order, wie Jürgen in einem Kommentar vorschlägt.

Alternativ tun, um die Ordnung in der Abfrage:

SELECT fruit_id 
FROM cart 
WHERE user_id = 1 
ORDER BY FIELD(fruit_id, 3, 2, 1); 

Dies erfolgt in umgekehrter Reihenfolge sortieren wird. Hinweis: Sie können FIND_IN_SET() verwenden können:

ORDER BY FIND_IN_SET(fruit_id, '3,2,1') 
Verwandte Themen