Problem mit mysql Abfrage und 'NOT IN'

Hallo Forum,

folgendes Problem:

Ich habe 2 Tabellen (Tabelle users und Tabelle sternchen) und möchte nun prüfen welcher Benutzer, der in der Tabelle „users“ enthalten ist aber nicht in Tabelle „sternchen“.

Ich habe folgende Abfrage gebaut, die zwar in PHPMYADMIN funktioniert aber leider nicht in meinem PHP Skript.

„SELECT * FROM users WHERE UserName not in (Select user from sternchen)“;

Warum funktioniert diese Abfrage in PHPMYADMIN aber nicht im Skript?

Das Skript ist ein Administrations-Skript, welches einwandfrei funktioniert. Die Abfrage wirft auch keine Fehler aus, sondern gibt einfach nichts aus.

Kann hier jemand Abhilfe leisten??

Besten Dank!

Laurenzo

Hallo Forum,

gelöscht :

Warum funktioniert diese Abfrage in PHPMYADMIN aber nicht im
Skript?

Das Skript ist ein Administrations-Skript, welches einwandfrei
funktioniert. Die Abfrage wirft auch keine Fehler aus, sondern
gibt einfach nichts aus.

gelöscht :

Hallo Laurenzo,

ohne den Ausschnitt aus dem Script (SQL-Statement inklusive Ausgabe) werden wir nur raten können.

MfG Georg V.

Hi Georg,

anbei der Ausschnitt aus meinem Skript:

<?php $db_host = "localhost";
$db\_user = "bla"; $db\_pass = "trara"; $db\_name = "blups"; $conID = mysql\_connect( $db\_host, $db\_user, $db\_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" ); if ($conID) { mysql\_select\_db( $db\_name, $conID ); } //Anzahl der Benutzer, die registriert aber keinen Stern eingestellt haben $sql\_nostar = "SELECT \* FROM `users` WHERE `UserName` not in (Select user from `sternchen`)"; $losjetzt = mysql\_query($sql\_nostar) or die('Fehler: ' .mysql_error().'');
$machHinne = mysql_result($losjetzt,0);

echo '';
echo '';
while ($ergebnis = mysql_fetch_row($losjetzt)) {

echo ' '.$ergebnis[1]. ' ';
}
echo '';

?>



Danke im Voraus. :smile:

Hallo Laurenzo,

versuche es mal mit

$losjetzt = mysql_query($sql_nostar) or die(‚Fehler: ’ .mysql_error().‘’);

echo ‚‘;
while ($ergebnis = mysql_fetch_row($losjetzt)) {
echo ’ '.$ergebnis[1]. ‚‘;
}
echo ‚‘;

?>

MfG Georg V.

P.S.: Wieviele Datensätze hatte die Abfrage im Frontend?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Georg,

danke für die schnelle Antwort.

Das Ergebnis liefert folgendes zurück:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in …

Mit meinem zuvor geposteten Code wird überhaupt nichts geliefert.
Es sei denn, ich ersetze in der Select-Anweisung die Spalte „UserName“ durch „*“. Dann erhalte ich aber zuviele Werte zurück.

Ich möchte ja nur diejenigen UserName’s zurückgeliefert haben, die in der einen Tabelle enthalten sind aber nicht in der anderen.

Das ist schon alles.

In PHPMYADMIN funktioniert es tadellos. Dort erhalte ich das exakte Ergebnis. Genau die selbe Select-Anweisung verwende ich auch in meinem PHP-Skript. Dort funktioniert es aber aus irgendeinem unerklärlichen Grund nicht.

Was ich gerade noch feststellen mußte ist, dass ich in der Unterabfrage bei den abgefragten Spalten die Hochkommata vergessen habe. Die habe ich nun gesetzt. Das Ergebnis ist aber immernoch „NICHTS“. :frowning:

Nun bin ich mit meinem Hinduportoschinesisch am Ende.

Any Ideas in da Hosentäsch?

Hallo,

Warum es nicht geht weiss ich ohne genaue Fehlermeldung auch nicht, evtl. tut es aber auch eine Alternative:

SELECT users.* FROM users LEFT JOIN sternchen ON users.username=sternchen.user WHERE sternchen.user IS NULL

Alex

Hi Alex,

besten Dank für Deine prompte Antwort.
Mit einem Left-Join hatte ich es auch schon zuvor probiert, jedoch funktioniert es in PHP nicht. In PHP bekomme ich als Rückgabewert NICHTS zurück. Es gibt auch keine Fehlermeldung.

Deinen SQL-Code habe ich, wie ich es auch mit meinem tat, in PHPMYADMIN ausgeführt. Dort funktioniert dein Code fantastisch.
Meiner tat es in PHPMYADMIN auch. Jedoch in PHP liefern beide SQL-Anweisungen keinen Wert zurück, was aber nicht sein kann.

Denn ich habe genau einen Datensatz, der als Rückgabewert geliefert werden müsste. Wie gesagt…in PHPMYADMIN funktionierts. In PHP leider nicht. Woran das liegt, steht in den Sternen.

-(

Hast du noch einen andere Idee?

Hi Georg,

danke für die schnelle Antwort.

Das Ergebnis liefert folgendes zurück:

Warning: mysql_fetch_row(): supplied argument is not a valid
MySQL result resource in …

gelöscht:
Any Ideas in da Hosentäsch?

Hallo Laurenzo,

a) sorry für die grauenhafte Formtierung
b) man kann nicht immer alle Fehler auf einmal finden
c) die Antwort hättest Du früher, wenn Du auf meinen Eintrag geantwortet hättest
d) der zweite Fehler ist die 1 bei $ergebnis

$losjetzt = mysql_query($sql_nostar) or die(‚Fehler: ’ .mysql_error().‘’);
echo ‚‘;
while ($ergebnis = mysql_fetch_row($losjetzt)) {
echo ’ '.$ergebnis[0]. ‚‘;
}
echo ‚‘;

e) Du solltest dazu schrieben, dass zu einen schwarzen Hintergrund hast, weiss auf weiss macht sich so gut!

MfG Georg V.

Hi Georg!

Ja richtig, meine Schuld. Mit dem schwarzen Hintergrund hätte ich erwähnen sollen. Sorry! Ich hatte die Tage wirklich wenig Zeit, sonst hätte ich längst auf Dein Posting geantwortet. Auch dafür möchte ich mich entschuldignen.

Es geht um unseren Sternenhimmel, zu sehen unter „www.sternenhimmel4u.de.vu“.
Hab ich für meine Freundin und unseren verstorbenen Hund gemacht.

Ausgangssituation:

Ich möchte meine Administrationsseite etwas ausbauen.
Ich habe zwei Tabellen
1.) users
2.) sternchen

Es gibt so einige Benutzer, die sich selbst zwar registrieren, aber keinen Stern einstellen. Diese Benutzer möchte ich auf einfache Art und Weise ausfindig machen. Also dachte ich mir, ich prüfe nach, welcher Benutzer sich in der Tabelle „users“ befindet aber nicht in der Tabelle „sternchen“ vorhanden ist. Somit hätte ich einen Datensatz in der Tabelle „users“ und keinen Datensatz in der Tabelle „sternchen“.

OK…zum Problem:

Mehrere Versuche die richtige SQL-Anweisung sind teilweise gescheitert.
Das deswegen, weil die SQL-Anweisungen immer in PHPMYADMIN funktionieren, jedoch nicht in PHP selbst.

Ich habe nun folgende SQL-Anweisung probiert:

$sql_nostar = „SELECT users.* FROM users LEFT JOIN sternchen ON
users.username=sternchen.user WHERE users.UserName is not NULL AND
sternchen.user IS NULL“;

Die Ausgabe hingegen soll wie Du vorgeschlagen hast, folgendermassen:

echo ‚‘;
while ($ergebnis = mysql_fetch_row($losjetzt)) {
echo ‚‘.$ergebnis[0]. ‚‘;
}
echo ‚‘;

Ich weiss immernoch nicht warum die oben gezeigte SQL Anweisung in PHP nicht funktioniert, jedoch in PHPMYADMIN.

Verstehe ich nicht wirklich.

Dein Vorschlag ergab leider auch nichts.

Aber auch die Änderung von Spalte 0 in Spalte 1 zeigt nichts.

Ich habe zum Test auch mal beide Spalten versucht anzuzeigen.
Spalte 0: ID
Spalte 1: UserName

Den UserName möchte ich auf jeden Fall ausgeben.

Hast Du noch eine Idee?

Vielen Dank für Deine Bemühungen!

Mo

In PHP bekomme ich als
Rückgabewert NICHTS zurück. Es gibt auch keine Fehlermeldung.

==> Füg doch mal diesen Befehl nach der SQL-Abfrage ein:
echo mysql_error();
Wenn bei deiner SQL-Abfrage ein Fehler auftritt, dann wird durch diese eingefügte Zeile der Fehler angezeigt. Dann könnte man weiter sehen.

Ajo

hallo Ajo,

habe das Problem gelöst. Es lag daran, dass ich meinen $result zweimal abgefragt hatte. Damit kam mein Skript nicht klar. Eines davon gelöscht, funktionierte alles plötzlich. :smile:

In diesem Sinne…

Vielen Dank für Dein Posting und Deine Hilfsbereitschaft.

Bis zum nächsten Problem! :wink:

Laurenzo