Autor |
Beitrag |
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 01.11.16 10:00
Ich möchte noch mal auf meinen UNION-Vorschlag hinweisen
Aber mit einer einfachen if-Abfrage läßt sich natürlich auch die OR-Query auflösen...
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Di 01.11.16 15:19
Okay. Ich habe jetzt diesen Code:
PHP-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| $CurrentUser = mysqli_real_escape_string($conn, $_POST["currUsr"]); $sqlQuery = "SELECT `To_ID` FROM `MainlysoftFreundesliste` WEHRE `From_ID`='$CurrentUser' UNION SELECT `From_ID` FROM `MainlysoftFreundesliste` WHERE `To_ID`='$CurrentUser'"; $result = mysqli_query($conn, $sqlQuery); if($result) { if($result->num_rows > 0) { while($row1 = $result->fetch_assoc()) { $zwischenVariable = $row1["To_ID"]; $newQuery = "SELECT `name`, `vorname`, `language`, `gender` FROM `MainlysoftBenutzer` WHERE `ID`='$zwischenVariable'"; $newResult = mysqli_query($conn, $newQuery); if($newResult) { if ($newResult->num_rows > 0) { while($row = $newResult->fetch_assoc()) { echo $row["name"]. ";" . $row["vorname"]. ";" .$row["language"]. ";" .$row["gender"]. ""; } } else { echo "0 results"; } } } } } else { echo "Error in SQL statement"; } |
Aber nun bekomme ich den Fehler: Error in SQL statement...
Die Datenbanktabelle sieht jetzt so aus:
ID | From_ID | To_ID |
------------------------------
1 | 1 | 2 |
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Di 01.11.16 16:03
Der Fehler ist so natürlich wenig hilfreich.
Informativer wird's, wenn du die Zeile im else-Zweig so änderst:
PHP-Quelltext 1: 2: 3: 4:
| else { echo "Error in SQL statement: " . mysqli_error($conn); } |
Bitte mal probieren und rückmelden
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Di 01.11.16 16:16
'WEHRE't den Anfängen.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Di 01.11.16 16:47
Hupps. WHERE ist aber auch ein doofes Wort
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| $CurrentUser = mysqli_real_escape_string($conn, $_POST["currUsr"]); $sqlQuery = "SELECT `To_ID` FROM `MainlysoftFreundesliste` WHERE `From_ID`='$CurrentUser' UNION SELECT `From_ID` FROM `MainlysoftFreundesliste` WHERE `To_ID`='$CurrentUser'"; $result = mysqli_query($conn, $sqlQuery); if($result) { if($result->num_rows > 0) { while($row1 = $result->fetch_assoc()) { $zwischenVariable = $row1["To_ID"]; $newQuery = "SELECT `name`, `vorname`, `language`, `gender` FROM `MainlysoftBenutzer` WHERE `ID`='$zwischenVariable'"; $newResult = mysqli_query($conn, $newQuery); if($newResult) { if ($newResult->num_rows > 0) { while($row = $newResult->fetch_assoc()) { echo $row["name"]. ";" . $row["vorname"]. ";" .$row["language"]. ";" .$row["gender"]. ""; } } else { echo "0 results"; } } else { echo "error here"; } } } else { echo "now here error"; } |
Jetzt kommt nur noch der Error: now error here. Das heißt ja, dass die Datenbank keine passenden Datensätze findet, oder wie?
Moderiert von Christian S.: C#- durch PHP-Tags ersetzt
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 01.11.16 17:18
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mi 02.11.16 01:22
Th69 hat folgendes geschrieben : | Ich möchte noch mal auf meinen UNION-Vorschlag hinweisen |
Wo genau wäre überhaupt der Vorteil, die zwei Selects per Union zu verknüpfen anstatt die UserId mit beiden IDs in der Tabelle zu vergleichen?
Also entweder das:
SQL-Anweisung 1: 2: 3:
| SELECT * FROM Friends WHERE FromUserId = 123 OR ToUserId = 123 |
Oder:
SQL-Anweisung 1: 2: 3: 4: 5: 6: 7: 8: 9:
| SELECT * FROM Friends WHERE FromUserId = 123
UNION
SELECT * FROM Friends WHERE ToUserId = 123 |
Am Ende kommen alle Datensätze raus, bei denen sowohl FromUserId oder ToUserId gleich 123 sind.
Oder übersehe ich da was?
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 02.11.16 11:38
Hallo Palldadin007,
bei der OR-Query müßtest du aber noch explizit die beiden Felder FromUserId und ToUserId überprüfen - bei der UNION-Version (in meiner Variante!) hat man sofort in einer Spalte alle Freunde stehen.
Abfragen mit * sollte man generell im Code vermeiden.
|
|
Palladin007
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Mi 02.11.16 13:07
Stimmt, damit bekomme ich dann eine flache Liste mit nur einer Spalte.
Endlich hab ich auch mal ein Beispiel, wo Union sinnvoll ist, hab ich bisher noch nie verwendet
Zitat: | Abfragen mit * sollte man generell im Code vermeiden. |
Klar, war auch nur ein Beispiel weil wegen spät und so
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Do 03.11.16 17:53
Also ich verstehe den Fehler jetzt nicht ganz.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| $CurrentUser = mysqli_real_escape_string($conn, $_POST["currUsr"]); $sqlQuery = "SELECT `To_ID` FROM `MainlysoftFreundesliste` WHERE `From_ID`='$CurrentUser' UNION SELECT `From_ID` FROM `MainlysoftFreundesliste` WHERE `To_ID`='$CurrentUser'"; $result = mysqli_query($conn, $sqlQuery); if($result) { while($row1 = $result->fetch_array()) { $zwischenVariable = $row1["To_ID"]; $newQuery = "SELECT `name`, `vorname`, `language`, `gender` FROM `MainlysoftBenutzer` WHERE `ID`='$zwischenVariable'"; $newResult = mysqli_query($conn, $newQuery); if($newResult) { if ($newResult->num_rows > 0) { while($row = $newResult->fetch_assoc()) { echo $row["name"]. ";" . $row["vorname"]. ";" .$row["language"]. ";" .$row["gender"]. ""; } } else { echo "0 results"; } } else { echo "error here"; } } } else { echo "Error in SQL statement"; } |
Wenn ich diesen Script jetzt ausführe, bekommt ich keine Antwort (oder eine leere). Ich möchte nur, dass die Tabelle "Freundesliste" durchsucht wird. Und für jeden Freund, der mit dem aktuell eingeloggten User befreundet ist, soll nochmal in der Tabelle "Benutzer" gesucht werden und dann Daten rausgegeben werden.
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 03.11.16 20:57
Nur eine Vermutung: passen die Datentypen?
Stehen in den Datenbankspalten From_ID und To_ID denn wirklich Strings drin (oder Integer) - du verwendest ja Hochkommata?
Und bei einer UNION bin ich mir nicht sicher, was der genauer Spaltenname der Query ist (d.h. laß dir doch mal $zwischenVariable ausgeben) - evtl. nimm mal $row1[0].
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 04.11.16 18:04
In der Datenbank `Freundesliste` sind nur Datentypen vom Typ INT.
Ich habe mir mal die zwischenVariable und row[0] geechoed. Aber die Serverantwort war leer
Moderiert von Th69: PHP-Tags hinzugefügt
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 04.11.16 18:42
Was steht denn in $CurrentUser drin? Und ich wiederhole meine Frage:
Warum verwendest du bei deren Benutzung dann die Hochkommata (Zahlen (IDs) werden direkt verwendet - wie in C# auch ;- )?
s.a. das $limit-Beispiel in How to include a PHP variable inside a MySQL insert statement
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 04.11.16 20:18
Ups, mir ist ein kleiner großer Fehler passiert. In der C# Anwendung habe ich der NameValueConnection einen falschen Parametername gegeben. Jetzt funktioniert es halbwegs.
Wenn sich jetzt der User einloggt, bekommt dieser eingeloggte User sich selbst als Freund, das liegt wahrscheinlich daran, dass dass der eingeloggte User mit einem Freund an einem Datensatz hängt. SQL gibt jetzt wahrscheinlich den einen User aus, der in dem Fall der eingeloggte User ist.
Wie kann man das so programmieren, dass genau der andere Datensatz als der eingeloggte User ausgegeben wird?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 04.11.16 20:41
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Th69
Beiträge: 4785
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Fr 04.11.16 20:53
Bei der UNION-Query kann das aber nur passieren, wenn in einem Datensatz derselbe Wert in beiden Spalten steht.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 04.11.16 21:10
Vielen Dank Leute,
jetzt funktioniert es. Der Fehler war, dass ich in der SQL Abfrage * statt `From_ID` genommen habe. Jetzt funktionierts
Vielen Dank, an die Helfer
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Fr 04.11.16 21:36
Ups, das Thema ist doch noch offen. Ich habe noch ein kleines Problem.
In der Datenbank `Freundesliste` sind nun 3 Datensätze. Jetzt ist aber nur das Problem, dass die PHP Datei nur einen von 2 Freunden raussendet. Wieso?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| if($conn) { $CurrentUser = mysqli_real_escape_string($conn, $_POST["currUsr"]); $sqlQuery = "SELECT `To_ID` FROM `MainlysoftFreundesliste` WHERE From_ID='$CurrentUser' UNION SELECT `From_ID` FROM `MainlysoftFreundesliste` WHERE To_ID='$CurrentUser'"; $result = mysqli_query($conn, $sqlQuery); if($result) { if ($result->num_rows > 0) { while($row1 = $result->fetch_array()) { $zwischenVariable = $row1["To_ID"]; $newQuery = "SELECT `name`, `vorname`, `language`, `gender` FROM `MainlysoftBenutzer` WHERE `ID`='$zwischenVariable'"; $newResult = mysqli_query($conn, $newQuery); if($newResult) { if ($newResult->num_rows > 0) { while($row = $newResult->fetch_assoc()) { echo $row["name"]. ";" . $row["vorname"]. ";" .$row["language"]. ";" .$row["gender"]. ""; } } else { echo "0 results"; } } else { echo "0 results"; } } } else { echo "o results"; } } else { echo "Error in SQL statement"; } } |
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.11.16 03:56
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 05.11.16 15:02
Das Problem war, dass ich im PHP Script | vergessen habe. Die C# Applikation splittet die Serverantwort dann an dem |. Jetzt funktioniert aber wirklich alles
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|