Autor Beitrag
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 01.11.16 15:19 
Okay. Ich habe jetzt diesen Code:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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:

ausblenden PHP-Quelltext
1:
2:
3:
4:
else
    {
      echo "Error in SQL statement: " . mysqli_error($conn);
    }


Bitte mal probieren und rückmelden ;-)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 01.11.16 16:16 
'WEHRE't den Anfängen. :lol:
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Di 01.11.16 16:47 
Hupps. WHERE ist aber auch ein doofes Wort :(

ausblenden volle Höhe 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:
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 user profile iconChristian 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



BeitragVerfasst: Di 01.11.16 17:18 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mi 02.11.16 01:22 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden SQL-Anweisung
1:
2:
3:
SELECT *
FROM Friends
WHERE FromUserId = 123 OR ToUserId = 123


Oder:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: 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 :D

Zitat:
Abfragen mit * sollte man generell im Code vermeiden.

Klar, war auch nur ein Beispiel weil wegen spät und so :D
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: Do 03.11.16 17:53 
Also ich verstehe den Fehler jetzt nicht ganz.

ausblenden volle Höhe 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:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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 user profile iconTh69: PHP-Tags hinzugefügt

_________________
"Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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



BeitragVerfasst: Fr 04.11.16 20:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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?

ausblenden volle Höhe 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:
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



BeitragVerfasst: Sa 05.11.16 03:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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