Datensätze filtern nach inhalt?

PhoenixDigiPro

Grünschnabel
Hallo zusammen,

das Filtern z.B. das bestimmte User einer tabelle nicht ausgegeben werden ist ja kein Problem mit NOT IN das habe ich schon mehrfach verwendet z.B. so

PHP:
$res = mysql_query('SELECT * FROM '.$db_iconomy_table.' WHERE username NOT IN ("'. $iconomy_idle_1 . '", "' . $iconomy_idle_2 . '","' . $iconomy_idle_3 . '") ORDER BY balance DESC')
	or die('Auswahl der Datensätze fehlgeschlagen');

mein Problem ist aber das das Plugin hat 2 Tabellen erstellt

In Tabelle 1 steht nur die 'id' und der 'user'

In Tabelle 2 seht die 'user_id' und die skills: 'taming', 'mining', 'woodcutting', 'repair', 'unarmed', 'herbalism', 'excavation'.

die Ausgabe aller Daten habe ich ohne Probleme hinbekommen:

PHP:
<?php
			
	// Zugang zur Datenbank
	$link = mysql_connect($db_server, $db_user, $db_pw)
	or die('Verbindung zur Datenbank fehlgeschlagen' . mysql_error());
	// Auswahl der richtigen Datenbank
	mysql_select_db("$db_name")
	or die('Auswahl der Datenbank fehlgeschlagen' . mysql_error());		
	// Auswahl der Datensätze in der Datenbank
	$res = mysql_query('SELECT * FROM '.$db_mcmmo_table_users.' INNER JOIN '.$db_mcmmo_table_skills.' ON '.$db_mcmmo_table_skills.'.user_id = '.$db_mcmmo_table_users.'.id ORDER BY user ASC')
	or die('Auswahl der Datensätze fehlgeschlagen' . mysql_error());
						
	echo "<p><h1>mcMMO Uebersicht</h1></p><br />";
						
	// Tabellenbeginn
	echo "<table border='1'>";
			
	// Überschrift
	echo "<tr> <td>Nr.</td> <td>Avatar</td> <td>Username</td> <td>taming</td> <td>mining</td> <td>woodcutting</td> <td>repair</td> <td>unarmed</td> <td>herbalism</td> <td>excavation</td> <td>archery</td> <td>swords</td> <td>axes</td> <td>acrobatics</td> <td>fishing</td></tr>";
						
	$If = 1;
		while($dsatz = mysql_fetch_assoc($res))
	{
		echo "<tr>";
		echo "<td>" . $If . "</td>";
		echo "<td><img src=http://minotar.net/avatar/".$dsatz['user']."/50.png /></td>";
		echo "<td>" . $dsatz['user'] . "</td>";
		echo "<td>" . $dsatz['taming'] . "</td>";	
		echo "<td>" . $dsatz['mining'] . "</td>";
		echo "<td>" . $dsatz['woodcutting'] . "</td>";
		echo "<td>" . $dsatz['repair'] . "</td>";
		echo "<td>" . $dsatz['unarmed'] . "</td>";
		echo "<td>" . $dsatz['herbalism'] . "</td>";
		echo "<td>" . $dsatz['excavation'] . "</td>";
		echo "<td>" . $dsatz['archery'] . "</td>";
		echo "<td>" . $dsatz['swords'] . "</td>";
		echo "<td>" . $dsatz['axes'] . "</td>";
		echo "<td>" . $dsatz['acrobatics'] . "</td>";
		echo "<td>" . $dsatz['fishing'] . "</td>";
		echo "</tr>";
		$If = $If + 1;
	}
					
	// Tabellenende
	echo "</table>";
						
?>

Darunter sind jetzt aber viele Datensätze bei denen alle Skills auf Null sind diese Datensätze sind eig überflüssig.

Meine Frage ist jetzt wie kann ich die Datensätze überspringen bei denen alle Skills = '0' sind.

ich bedanke mich für Ideen

MFG

Phoenix
 
SQL:
SELECT *
FROM table1
WHERE id IN (SELECT user_id FROM table2 WHERE skills != 0);

-- oder 

SELECT t1.*
FROM
    table1 AS t1
    INNER JOIN table2 AS t2
        ON t1.ud = t2.userid
WHERE
    IFNULL(t2.skills, 0) != 0;

-- oder

SELECT t1.*
FROM
    table1 AS t1
    INNER JOIN (SELECT user_id FROM table2 WHERE skills != 0) AS t2
        ON t1.ud = t2.userid;

-- oder ....
 
Zuletzt bearbeitet von einem Moderator:
habe mir deine beispiele angeguckt und hoffe sie richtig verstanden zu haben ^^ habe es so umgesetzt:

PHP:
$res = mysql_query('SELECT * FROM '.$db_mcmmo_table_users.' INNER JOIN '.$db_mcmmo_table_skills.' ON '.$db_mcmmo_table_skills.'.user_id = '.$db_mcmmo_table_users.'.id WHERE id IN (SELECT user_id FROM '.$db_mcmmo_table_skills.' WHERE taming != 0 AND mining != 0 AND woodcutting != 0 AND repair != 0 AND unarmed != 0 AND herbalism != 0 AND excavation != 0 AND archery != 0 AND swords != 0 AND axes != 0 AND acrobatics != 0 AND fishing != 0) ORDER BY user ASC')
	or die('Auswahl der Datensätze fehlgeschlagen' . mysql_error());

jetzt wird mir nur leider kein Datensatz mehr angezeigt.

MFG

Phoenix
 
Ich würde dein SQL auch nicht verstehen. Formatier es mal damit man es auch lesen kann. (Ja, auch SQL kann men mit Zeilenumbrüchen und Tabs in eine lesbare Form bringen)
Zudem: PHP MySQL Debug Queries

Auch denke ich, das du besser mit OR anstelle AND arbeiten solltest. Hauptsache ein Skill ist nicht 0
 
Danke das AND durch OR ersetzen war genau mein Denkfehler
und auch danke für den Link werde mir den mal genauer anschauen :)

jetzt geht alles allso vielen lieben dank und hier der Code auch nochmal Ordentlich ;D


SQL:
	$res = mysql_query('SELECT * FROM '.$db_mcmmo_table_users.' INNER JOIN '.$db_mcmmo_table_skills.' ON '.$db_mcmmo_table_skills.'.user_id = '.$db_mcmmo_table_users.'.id 
		WHERE id IN (SELECT user_id FROM '.$db_mcmmo_table_skills.' 
		WHERE taming != 0 
		OR mining != 0 
		OR woodcutting != 0 
		OR repair != 0 
		OR unarmed != 0 
		OR herbalism != 0 
		OR excavation != 0 
		OR archery != 0 
		OR swords != 0 
		OR axes != 0 
		OR acrobatics != 0 
		OR fishing != 0) 
		ORDER BY user ASC')
	or die('Auswahl der Datensätze fehlgeschlagen' . mysql_error());
 
Zuletzt bearbeitet von einem Moderator:
Zurück