Autor Beitrag
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Di 01.11.16 09: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 14: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: 853
Erhaltene Danke: 139

Win7
VS 2013, VS2015
BeitragVerfasst: Di 01.11.16 15: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: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Di 01.11.16 15: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 15: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2103
Erhaltene Danke: 383

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 01.11.16 16:18 
ausblenden PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if($result->num_rows > 0)
{
  // Bedingung nicht erfüllt, also folgt ...
}
else
{
  echo "now here error";
}

Selbsterklärend.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1177
Erhaltene Danke: 157

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Mi 02.11.16 00: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: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Mi 02.11.16 10: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: 1177
Erhaltene Danke: 157

Windows 10 x64 Home Premium
C# (VS 2015 Enterprise)
BeitragVerfasst: Mi 02.11.16 12: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 16: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: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Do 03.11.16 19: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 17: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: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Fr 04.11.16 17: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 19: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2103
Erhaltene Danke: 383

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 04.11.16 19:41 
Nun, nach deiner Beschreibung weist die Tabelle folgendes Schema auf:

user profile iconCsharp-programmierer hat folgendes geschrieben:
ID | UserEingeloggt | UserAnderer |
-------------------------------------------------------
1 | Cshrp-programmierer | User2 |
-------------------------------------------------------
2 | User2 | Csharp-programmierer |
-------------------------------------------------------

Schreib' die Select Anweisung so, dass nicht auf beide Spalten geprüft wird wie im Moment, sondern nur auf die betreffende Spalte.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 3896
Erhaltene Danke: 794

Win7
C++, C# (VS 2015/17)
BeitragVerfasst: Fr 04.11.16 19: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 20: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 20: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2103
Erhaltene Danke: 383

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 05.11.16 02:56 
Sag mal, stimmt die Version des hier geposteten Quelltextes, mit der Version bei dir überein? Die letzten 2 "ups" waren auf Tatsachen zurückzuführen, auf die wir keinen Überblick haben.
Es stresst dich doch keiner, also mach es bitte ordentlich.

Lass dir von der Variable $zwischenVariable ein echo geben, und schau wieviele/welche Werte dabei rauskommen. Das sind die IDs der Freunde, nehm ich an.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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 14: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