Probleme mit DB Abfrage

user_5

Grünschnabel
hallo erstmal
ich habe:
zwei tabellen
Code:
t1 ea
`id` int(3) NOT NULL AUTO_INCREMENT,
  `name` text,
  `ort` text,
t2 kr
`name` text NOT NULL,
  `status` text NOT NULL,
mein problem:
in t2.status stehen die werte von t1.id welche auch mehrfach vorkommen
ausgegeben sollen nur die werte aus t1 werden, die wo nicht in t2.status vorkommen

meine abfrage
PHP:
function STATUS(){       
  $sql_select="SELECT status FROM kr";
  $sql_status = mysql_query($sql_select);
  while($row_status = mysql_fetch_assoc($sql_status))
  {
	echo" AND id NOT LIKE '".$row_status['status']."'";
	
  }
}

$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' ".STATUS();
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
{ }
ich hoffe damit kann einer was anfangen.
 
Zuletzt bearbeitet von einem Moderator:
(A) Gibt es einen Fehler? Wenn es einen gibt, wird er angezeigt oder bleibt die Ausgabe weiß?
http://www.tutorials.de/content/1126-fehlersuche-php-scripts.html

(B) Bringt die SQL-Query nicht das gewünschte Ergebnis?
Code:
#versuchen
    id NOT LIKE 'x'
# durch
    id<>x
# oder
   NOT id=x
# ersetzen
LIKE ist für eindeutige Zahlenvergleiche unnötig. Und id int(3) zu status (text) zu vergleichen ist auch recht ungünstig.

mfg chmee
 
Code:
Code:
$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' ".STATUS();
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
{ .... }

bringt ohne .STATUS() schon das erwünschte ergebnis nur nicht vollständig.
Aber .STATUS() erzeugt nicht den code für die abfrage sondern giebt das echo aus.
Code:
function STATUS(){       
  $sql_select="SELECT status FROM kr";
  $sql_status = mysql_query($sql_select);
  while($row_status = mysql_fetch_assoc($sql_status))
  {
    echo" AND id NOT LIKE '".$row_status['status']."'";
    
  }
}
Weise ich hier das ergebnis einer variablen zu bekomme ich nur den letzten wert aus 'status', logisch da in der schleife immer wider überschrieben.
pack ich die zweite abfrage mit in die erste WHILE bekomme ich das richtige ergebnis, aber leider so oft wie einträge in t2.status sind.

Mit STATUS()
Code:
$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' STATUS()";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_array($ergebnis))
{ .... }
bekomme ich das als Ausgabe " You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near STATUS()"



Die werte 99 u. 98 sind vorgegeben, die restlichen aus t1'id' welche in t2 'status' nicht vorkommen sollen angezeigt werden.

status in t2 ist ein (INT) ist oben im code falsch.

das ganze dient am ende dazu einträge aus t1 zu löschen aber nur wenn die t1.id nicht in t2.status vorkommt.
ich bin am verzweifeln.
Ich habe es mit auch JOIN und diversen andenen varianten versucht, google vergew....
MYSQL docu durchwühlt u.u.u. aber wenn der Ansatzpunkt fehlt ist das nicht so einfach.
 
Zuletzt bearbeitet:
Naja, der Error sagt, dass das SQL-Statement syntaktisch fehlerhaft ist. Bitte mach doch mal ein
PHP:
echo $abfrage."<br/>";
vor der Query, damit man das zusammengeflickte Statement mal betrachten kann - in diesem Fall auch Du :)

mfg chmee

p.s.: sehe grad, Du versucht die function STATUS() innerhalb der Variablen anzuwerfen..
PHP:
$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' STATUS()";
# ****

$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' ".STATUS();
# oder
$sqlZusatz= STATUS();
$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' ".$sqlZusatz;
# und Deine Function() sollte besser ein return anstatt eines echo haben!
http://php.net/manual/de/language.functions.php

mfg chmee
 
Zuletzt bearbeitet:
das Problem liegt in der function. wenn ich die werte mit echo darstelle giebt er alle werte aus aber nicht in der querry.

AND id NOT LIKE '99' AND id NOT LIKE '3' AND id NOT LIKE '98' AND id NOT LIKE '2' AND id NOT LIKE '99' AND id NOT LIKE '3' AND id NOT LIKE '1' AND id NOT LIKE '99' AND id NOT LIKE '98' AND id NOT LIKE '5' AND id NOT LIKE '98' AND id NOT LIKE '2' AND id NOT LIKE '2' AND id NOT LIKE '98' AND id NOT LIKE '1' AND id NOT LIKE '2' AND id NOT LIKE '5' AND id NOT LIKE '98' AND id NOT LIKE '2' AND id NOT LIKE '99' AND id NOT LIKE '3' AND id NOT LIKE '98' AND id NOT LIKE '2' AND id NOT LIKE '99' AND id NOT LIKE '3' AND id NOT LIKE '1' AND id NOT LIKE '99' AND id NOT LIKE '98' AND id NOT LIKE '5' AND id NOT LIKE '98' AND id NOT LIKE '2' AND id NOT LIKE '2' AND id NOT LIKE '98' AND id NOT LIKE '1' AND id NOT LIKE '2' AND id NOT LIKE '5' AND id NOT LIKE '98' AND id NOT LIKE '2' SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98'
Code:
function STATUS(){  

$sql_select="SELECT status FROM kraefte";
$sql_status = mysql_query($sql_select);
while($row_status = mysql_fetch_array($sql_status))
{
	echo " AND id NOT LIKE '".$row_status['status']."'";
	
}}

$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98'".STATUS();
echo "\n".$abfrage;
$ergebnis = mysql_query($abfrage);
if (!$ergebnis) {die('Ungültige Abfrage: ' . mysql_error());}
while($row = mysql_fetch_array($ergebnis))
{....}
nehme ich anstatt echo return bekomme ich
'SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98' AND id NOT LIKE '99''
wobei das letzte and id not like 99 von der ersten db abfrage stammt.
jetzt fehlt mir nurnoch der anstoss für die function das er alle ausgiebt.
 
Mannomann..

Du initialisierst eine Variable zu Beginn der Funktion
PHP:
$output='';
und fügst während der while-Schleife hinzu.
PHP:
$output .= " AND NOT";
Diese $output gibst Du dann per return zurück.

mfg chmee
 
ich bekomme aber immer nur den ersten wert
Code:
function STATUS(){  
$output='';
$sql_select="SELECT status FROM kraefte";
$sql_status = mysql_query($sql_select);
echo $sql_status;
while($row_status = mysql_fetch_array($sql_status))
{
	$output.=" AND id NOT LIKE '".$row_status['status']."'";
	return $output;
}}
$sql_zusatz=STATUS();
echo $sql_zusatz;
STATUS();

ausgabe 'Resource id #13 AND id NOT LIKE '99'Resource id #14'
 
Das return gehört ans Ende der Funktion, nicht in die Schleife!

mfg chmee
 
Zuletzt bearbeitet:
TAUSEND DANK.
Hab ich selber grade rausgefunden(Brett vorm Kopp)
jetzt läuft es ganz dufte.
Code:
function STATUS(){  
$output='';
$sql_select="SELECT status FROM kraefte";
$sql_status = mysql_query($sql_select);
while($row_status = mysql_fetch_array($sql_status))
{
	$output.=" AND id NOT LIKE '".$row_status['status']."'";
}
return $output;}
$sql_zusatz=STATUS();

$abfrage = "SELECT * FROM ea WHERE id NOT LIKE '99' AND id NOT LIKE '98'".$sql_zusatz;
$ergebnis = mysql_query($abfrage);
if (!$ergebnis) {die('Ungültige Abfrage: ' . mysql_error());}
while($row = mysql_fetch_array($ergebnis))
{ ...... }
 
Zurück