Nach SELECT * einzelne DB-Einträge verarbeiten

03/25/2019 19:48 Legithos#1
Hallo zusammen,

hab mal wieder ne Frage zu PHP. Ist es denn möglich, wenn ich zB. alle User aus der user-db per
Code:
SELECT *
raushole, diese einzeln anzusprechen ?

Also wenn ich mir die Einträge per
Code:
SELECT * FROM user
hole und diese dann in ner Whileschleife ausgebe habe ich zB:

user_id - username - password

1 - Tester - test123
2 - Mann - mann123

Jetzt würde ich gerne mit dem username von der user_id 2 weiterarbeiten (die anderen Daten werden aber auch benötigt). Brauchts jetzt ne neue und speziellere Datenbankanfrage mit
Code:
WHERE user_id = 2
oder geht das auch irgendwie anders ?

Danke schonmal,

Legithos
03/25/2019 20:06 False#2
Quote:
Originally Posted by Legithos View Post
Hallo zusammen,

hab mal wieder ne Frage zu PHP. Ist es denn möglich, wenn ich zB. alle User aus der user-db per
Code:
SELECT *
raushole, diese einzeln anzusprechen ?

Also wenn ich mir die Einträge per
Code:
SELECT * FROM user
hole und diese dann in ner Whileschleife ausgebe habe ich zB:

user_id - username - password

1 - Tester - test123
2 - Mann - mann123

Jetzt würde ich gerne mit dem username von der user_id 2 weiterarbeiten (die anderen Daten werden aber auch benötigt). Brauchts jetzt ne neue und speziellere Datenbankanfrage mit
Code:
WHERE user_id = 2
oder geht das auch irgendwie anders ?

Danke schonmal,

Legithos
Vorab: Keine SQLs mit einem Sternchen (*) im livebetrieb (nur zum testen!).

Naja wenn du alle holst hast du natürlich auch den user mit der id 2, musst halt nur schauen wo der im Array ist.

Kannst du deine Frage konkretisieren ? Sprich wofür genau brauchst du erst alle und dann den Benutzer mit der Id 2 ?
03/25/2019 20:36 type.#3
[Only registered and activated users can see links. Click Here To Register...] c:
03/25/2019 21:41 Legithos#4
Quote:
Originally Posted by False View Post
Vorab: Keine SQLs mit einem Sternchen (*) im livebetrieb (nur zum testen!).

Naja wenn du alle holst hast du natürlich auch den user mit der id 2, musst halt nur schauen wo der im Array ist.

Kannst du deine Frage konkretisieren ? Sprich wofür genau brauchst du erst alle und dann den Benutzer mit der Id 2 ?
Ich hab folgendes Problem:

Lass es mich an einem Beispiel erklären. Ich habe einen Karton in den ich Informationen reinpacken will. Meinetwegen verschiedene Rezepte. Jetzt pack ich da erstmal nur Rezepte der Kathegorie selbstgemachte Nudeln rein. Für jedes Rezept muss ich diverse Inputs befüllen. Bei selbstgemachten Nudeln noch relativ simple, weil ich da ja immer die gleichen Zutaten nur halt in verschiedenen Mengen habe, z.B.

Bandnudeln
Mehl: 100g
Salz: 20g
Zucker: 5g
Wasser: 2l

Spaghetti
Mehl: 120g
Salz: 10g
Zucker: 2g
Wasser: 2l

So. Die Grammangaben soll der Benutzer beim Befüllen des Kartons selbst eingeben können. Karton zu und Rezept ist fertig. Jetzt können andere User den Karton in einem großen Suchsystem finden.

Kompliziert wirds jetzt wenn ich ein weiteres Rezept einer anderen Kathegorie hinzufüge, mit dem man den Karton befüllen kann. Wenn's nicht mehr um Nudeln geht, sondern zb um nen Eintopf, brauche ich andere Zutaten und somit andere Inputfelder. Ich muss also eine Datenbank schaffen, bei der ich Oberkathegorien hinzufügen kann, die Inputfelder aber dann variabel sind. Soweit so gut, hab ich auch noch gebacken bekommen. Rein vom theoretischen her dann in diese Richtung (hier am Beispiel jetzt nur mit einer Zutat):

karton_db
karton_id - user_id - category - ingrediants_id - amount - value_id

ingrediants_db
ingrediants_id - ingrediants_name

value_db
value_id - value_name

Damit ich mir jetzt alle meine Kartons (also überall wo meine user_id drinnen steht) mit den verschiedenen Informationen anzeigen lassen kann, brauch ich ne SQL-Abfrage mit INNER JOIN, auch das klappt. Wenn ich das mache zeigt er mir zB. folgendes an:

Karton 1
Karton_id: 1
User_id: 1
Category: Nudeln
Ingrediants_id: 1 (Mehl)
Amount: 250
Value_id: 1 (Gramm)

Karton 2
Karton_id: 2
User_id: 1
Category: Eintopf
Ingrediants_id: 2 (Wasser)
Amount: 2
Value_id: 2 (Liter)

Jetzt habe ich wie ich wollte alle meine Kartons angezeigt. Kann ich jetzt irgendwie rein auf den zweiten Karton zugreifen, ohne eine neue SQL-Abfrage mit einer WHERE-Bedingung zu starten ? Und wenn ich wie hier alle Daten brauche, wie soll ich dann * im Livebetrieb vermeiden ?

Danke !
03/25/2019 21:53 False#5
Quote:
Originally Posted by Legithos View Post
Ich hab folgendes Problem:

Lass es mich an einem Beispiel erklären. Ich habe einen Karton in den ich Informationen reinpacken will. Meinetwegen verschiedene Rezepte. Jetzt pack ich da erstmal nur Rezepte der Kathegorie selbstgemachte Nudeln rein. Für jedes Rezept muss ich diverse Inputs befüllen. Bei selbstgemachten Nudeln noch relativ simple, weil ich da ja immer die gleichen Zutaten nur halt in verschiedenen Mengen habe, z.B.

Bandnudeln
Mehl: 100g
Salz: 20g
Zucker: 5g
Wasser: 2l

Spaghetti
Mehl: 120g
Salz: 10g
Zucker: 2g
Wasser: 2l

So. Die Grammangaben soll der Benutzer beim Befüllen des Kartons selbst eingeben können. Karton zu und Rezept ist fertig. Jetzt können andere User den Karton in einem großen Suchsystem finden.

Kompliziert wirds jetzt wenn ich ein weiteres Rezept einer anderen Kathegorie hinzufüge, mit dem man den Karton befüllen kann. Wenn's nicht mehr um Nudeln geht, sondern zb um nen Eintopf, brauche ich andere Zutaten und somit andere Inputfelder. Ich muss also eine Datenbank schaffen, bei der ich Oberkathegorien hinzufügen kann, die Inputfelder aber dann variabel sind. Soweit so gut, hab ich auch noch gebacken bekommen. Rein vom theoretischen her dann in diese Richtung (hier am Beispiel jetzt nur mit einer Zutat):

karton_db
karton_id - user_id - category - ingrediants_id - amount - value_id

ingrediants_db
ingrediants_id - ingrediants_name

value_db
value_id - value_name

Damit ich mir jetzt alle meine Kartons (also überall wo meine user_id drinnen steht) mit den verschiedenen Informationen anzeigen lassen kann, brauch ich ne SQL-Abfrage mit INNER JOIN, auch das klappt. Wenn ich das mache zeigt er mir zB. folgendes an:

Karton 1
Karton_id: 1
User_id: 1
Category: Nudeln
Ingrediants_id: 1 (Mehl)
Amount: 250
Value_id: 1 (Gramm)

Karton 2
Karton_id: 2
User_id: 1
Category: Eintopf
Ingrediants_id: 2 (Wasser)
Amount: 2
Value_id: 2 (Liter)

Jetzt habe ich wie ich wollte alle meine Kartons angezeigt. Kann ich jetzt irgendwie rein auf den zweiten Karton zugreifen, ohne eine neue SQL-Abfrage mit einer WHERE-Bedingung zu starten ? Und wenn ich wie hier alle Daten brauche, wie soll ich dann * im Livebetrieb vermeiden ?

Danke !
Sorry aber dein Vergleich mit Kartons und Rezepten hatt mich noch mehr verwirrt, wieso nicht einfach das reale Beispiel ?

Naja wenn du genau das hast was du willst (alle Kartons) dann kannst du einfach den Satzen aus dem Array holen den du brauchst..

Sprich z.B.
PHP Code:

$kartons 
//hole alle Kartons

$KartonZwei $kartons[2]; 
Ist jetzt natürlich nur minimal gehalten und im realen fall nicht möglich, da du dafür die Kartons erst mit deren Id sortieren müsstest du dann die Id als Key nutzen müsstest.

Also nochmal die Frage was genau willst/hast du ?
Wenn ich eine Benutzerliste habe und dann hole ich mir auch erst alle Informationen die ich haben will und wenn ich auf den Button "Bearbeiten" klicke und auf die neue Seite komme hole ich mir auch nur die Werte des Benutzers anhand der Id.

Wenn du aktuell alle Spalten brauchst dann statt * einfach alle spalten kommasepariert auflisten, wenn du jetzt neue Spalten einbaust die du nicht braust werden die nicht automatisch mit geladen => bessere Ladegeschwindigkeit.
03/26/2019 00:13 Devsome#6
Oder du holst erst alle Elemente, cached diese und machst dann mit einem click oder was auch immer (weiter Verarbeitung) ein select mit der {$id} von dem Element was du gerade bearbeitest, so könntest du in der neuen Abfrage mit Joins arbeiten.
Oder wie @False sagte, lade alle und arbeite dann mit $kartons[ArrayId] weiter.
03/26/2019 19:12 krankheit#7
ich würde ein neuen sql schreiben und anhand der ID laden. Warum möchtest du das überhaupt vermeiden ?
Da du alle Daten schon geladen hast kannst du damit natürlich auch weiter arbeiten...
Anhand deinens Kochbeispiel hätte ich die Daten übrigens so aufgebaut
[Only registered and activated users can see links. Click Here To Register...]