2016-07-13 4 views
1

Ich versuche, eine Freundesliste für meine Benutzer zurückzugeben, und ich versuche, den Wert für ihre user_id zu sammeln.Wählen Sie je nach Wert eine andere Spalte in einer Reihe.

| ID | user1_id | user1_status | user2_id | user2_status | 
| 1 | 1  | 0   | 2  | 0   | 
| 2 | 4  | 1   | 5  | 1   | 
| 3 | 4  | 1   | 6  | 0   | 
| 4 | 1  | 0   | 4  | 1   | 

hier das Problem ist, ich habe, sieht der Wert Ich bin entweder in seine „user1_id“/„user2_id“ und dann muß ich die „user_status“ NUR für den anderen Benutzer zurückzukehren. n. Ich habe diesen Tisch wirklich einfach gemacht. In meiner Version gibt es viel mehr Spalten, die mein Server nicht zurückgeben möchte.

Angenommen, der Client user_id ist 4, also muss ich die Zeile mit user1_id/user2_id gleich 4 auswählen und die andere Person user_status zurückgeben. In der Tabelle ist der erste Fall mit dem Wert 4 in user1_id, ich brauche diese Zeile, um die user2_id und user2_status zurückzugeben.

Hier ist, was ich bisher, aber es funktioniert nicht:

mysqli($connect, " 
SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id` AND `user2_status` 
     WHEN `user2_id`='4' THEN `user1_id` AND `user1_status` 
    ELSE NULL 
    END 
     from 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 
") 

Wie schreibe ich diese Abfrage-Anweisung?

+0

Warum haben Sie PHP-Tag? –

+0

Weil ich das in PHP abfrage, soll ich es ausziehen? – toastext

+0

Diese Frage, ich denke, ist nur über SQL, so können Sie PHP-Tag entfernen –

Antwort

1

Wenn Sie auf die CASE syntax beziehen, werden Sie sehen, dass es definiert ist, um eine einzelne Spalte und kein Tupel zurückzugeben. Darüber hinaus versuchen Sie in Ihrer Abfrage, entweder (user2_id, user_status) oder NULL zu erhalten. Hier erhalten Sie eine Diskrepanz in der Anzahl der Spalten, die ebenfalls nicht erlaubt ist.

Wenn Sie wirklich wirklich CASE verwenden möchten Sie tun können:

SELECT `id` 
    CASE 
     WHEN `user1_id`='4' THEN `user2_id`, 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user1_id` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user1_id`='4' THEN `user1_status` 
     ELSE NULL 
    END 
    CASE 
     WHEN `user2_id`='4' THEN `user2_status` 
     ELSE NULL 
    END 

    FROM 'relationship' 
     where `user1_id`='4' OR `user2_id`='4' 

ja, klobig und verwirrend. Viel einfacher, wenn Sie UNION verwenden.

SELECT id, user2_id AS uid, user2_status as ustatus FROM relationship WHERE user1_id = 4 
UNION 
SELECT id, user1_id AS uid, user1_status as ustatus FROM relationship WHERE user2_id = 4 
+0

Sie sagten, "wenn" Sie die CASE-Syntax beziehen. Gibt es einen besseren Weg, den Sie vorschlagen würden? Weil die CASE-Syntax der einzige Weg war, von dem ich dachte, dass mysql "if" -Aussagen machen könnte. BTW Vielen Dank, ich werde es versuchen. :) – toastext

+0

aktualisiert meine Antwort damit. Es ist Union. – e4c5

+0

Heh, du hast meine Gedanken gelesen. Ich werde etwas in der "Union" -Syntax recherchieren. – toastext

Verwandte Themen