Kurze SQL-Frage in Verbindung mit PHP

05/20/2019 20:06 Legithos#1
Hallo ihr Lieben,

welchen SQL-Befehl brauche ich wenn ich bei folgender Tabelle alle Werte einer Reihe nehmen will, wo keine 0 drinne steht ? Wichtig ist hier, dass die Werte die ich brauche immer unterschiedlich sind, mal brauche ich data1, mal data2 und mal data3 (also je nachdem wo keine 0 drinne ist).

User
Code:
user_id - username - usertype - data1 - data2 - data3

1          ichbins       1        1        0       0
2          wirsins       1        0        0       0
3          rhrsins       1        0        1       1
Ich will praktisch bei der ID 1 NUR user_id, username, usertype, data1.
Bei ID 2 dann user_id, username und usertype.
Bei ID 3 dann user_id, username, usertype, data2 und data3.

Ist das einfach umsetzbar ?

EDIT

Eine zweite Option wäre natürlich solche:

Code:
user_id - username - usertype - data1 - data2 - data3

1          ichbins       1        1        0       0
2          wirsins       1        1        1       0
3          rhrsins       1        1        1       1
Hier die Überlegung, die ID 1 (bei der ich nur eine Information hab) einfach zu definieren, dass ich von der Reihe alle Daten bis zu data1 brauche.
Bei ID 2 (mit 2 Informationen) dann bis zu data2.
Bei ID 3 (mit 3 Informationen) dann bis zu data3.

Die Anzahl an Informationen könnte ich auch als Variable im Vorfeld speichern (z.B. $amount_information = 5 wenn ich bis zu data2 will ... heißt also insgesamt dann 5 Spalten user_id, username, usertype, data1 und data2 von einer Reihe ).

Grüße,

Legithos
05/20/2019 21:10 False#2
Kann sein das ich gerade einfach zu doof bin, aber ich verstehe dein Ziel nicht ganze.
Willst du nur Benutzer haben die data1 = 1 haben dann kannst du ganz normal ein
Code:
WHERE data1 = 1
benutzen.

Kannst du ein reales Beispiel uns geben ?
05/20/2019 21:29 Legithos#3
Nein, das wäre ja nicht schwer. Ich will nur die Spalten einer Reihe, die nicht 0 sind ausgeben. Das aber in einem SQL-Query und nicht für alle 3 IDs einen eigenen SQL-Query.

Also bei ID 1 alle außer data2 und data3.
Bei ID 2 alle außer data3.
Bei ID 3 alle.


ODER kann ich in einer SQL-Tabelle mehrere Spalten gleich benennen ? Dann könnte ich zb. WHERE data != 0 machen ?
05/20/2019 22:09 False#4
Quote:
Originally Posted by Legithos View Post
Nein, das wäre ja nicht schwer. Ich will nur die Spalten einer Reihe, die nicht 0 sind ausgeben. Das aber in einem SQL-Query und nicht für alle 3 IDs einen eigenen SQL-Query.

Also bei ID 1 alle außer data2 und data3.
Bei ID 2 alle außer data3.
Bei ID 3 alle.


ODER kann ich in einer SQL-Tabelle mehrere Spalten gleich benennen ? Dann könnte ich zb. WHERE data != 0 machen ?
Du kannst die Ausgabe nur einschränken, aber nicht on the fly die auszugebenen Felder bestimmen.
Hol dir einfach alle und prüf es dann in PHP (oder was auch immer du nutzt).
05/20/2019 22:18 iMostLiked#5
Kannst das Case-Statement nutzen.
Code:
(CASE
    WHEN id = 1 THEN data1 = 1
    WHEN id = 2 THEN data1 = 1 AND data2 = 1
    WHEN id = 3 THEN data1 = 1 AND data2 = 1 AND data3 = 1
    ELSE data1 = 0
END);
Aber ich verstehe eine Sache nicht, was ist bei dir ID? Etwa die user_id? Falls ID eine Variable ist, welche in PHP evaluiert wird, kannst du ganz einfach das SQL-Statement entsprechend bauen. Also:

Code:
$WHERE = "data1 = 1";
if ($id === 2){
    $WHERE .= " AND data2 = 1";
}else if ($id === 3){
    $WHERE .= " AND data2 = 1 AND data3 = 1";
}
05/20/2019 22:24 False#6
Quote:
Originally Posted by iMostLiked View Post
Kannst das Case-Statement nutzen.
Code:
(CASE
    WHEN id = 1 THEN data1 = 1
    WHEN id = 2 THEN data1 = 1 AND data2 = 1
    WHEN id = 3 THEN data1 = 1 AND data2 = 1 AND data3 = 1
    ELSE data1 = 0
END);
Aber ich verstehe eine Sache nicht, was ist bei dir ID? Etwa die user_id? Falls ID eine Variable ist, welche in PHP evaluiert wird, kannst du ganz einfach das SQL-Statement entsprechend bauen. Also:

Code:
$WHERE = "data1 = 1";
if ($id === 2){
    $WHERE .= " AND data2 = 1";
}else if ($id === 3){
    $WHERE .= " AND data2 = 1 AND data3 = 1";
}
Soweit ich das verstanden habe geht es nicht um die Id, sondern an die werte in den Feldern data1/data2/data3.
Steht dort eine 1 drin will er diese haben, wenn eine 0 drin steht dann nicht.
Wobei das für mich kein Sinn macht, habe aber leider auch kein Reales Beispiel bekommen wie gewünscht (womit man eine schönere Lösung finden könnte)
05/20/2019 23:51 Legithos#7
Quote:
Originally Posted by False View Post
Soweit ich das verstanden habe geht es nicht um die Id, sondern an die werte in den Feldern data1/data2/data3.
Steht dort eine 1 drin will er diese haben, wenn eine 0 drin steht dann nicht.
Wobei das für mich kein Sinn macht, habe aber leider auch kein Reales Beispiel bekommen wie gewünscht (womit man eine schönere Lösung finden könnte)
Mit der ID meinte ich die user_id, ja ! Ich bin inzwischen auch den Weg gegangen über PHP zu gucken. Ein reales Beispiel zu konstruieren hätte wahrscheinlich nicht nur mein Projekt verraten, sondern auch bestimmt länger gedauert als eine Lösung zu finden .. Bin dir trotzdem immer dankbar für deine Mühen False !

Vielen Dank für eure Hilfe !
05/21/2019 20:17 florian0#8
In dem Fall sind Attributaufzählungen als Spalten keine gute Idee. Mit ner zweiten Tabelle für die Data-Attribute kannst du mehr erreichen. Hast du ne Chance das zu ändern?