php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 21.10.2008, 09:08  
Neuer Benutzer
 
Registriert seit: 21.10.2008
Beiträge: 13
parti02 befindet sich auf einem aufstrebenden Ast
Standard MySQL Abfrage Problem mit Where

Hallo Leute,
ich bin ein absoluter Neuling in PHP und MySQL, ich hoffe ihr könnt mir helfen.

Kurz zu meiner Datenbank:
Es gibt eine Tabelle "movies", welche einige Spalten hat, die man nicht direkt auslesen kann, es steht z.B. in der Spalte "medium_id" lediglich ein Zahl drin.
In der Tabelle "media" findet man die "medium_id" wieder mit der zugehörigen Spalte "name".

Meine Abfrage lautet:
Code:
$result = mysql_query("SELECT movies.*, media.* FROM movies, media WHERE movies.movie_id = $_GET[movie] AND media.medium_id = movies.medium_id");
Solange in "movies" "medium_id" tatsächlich eine Zahl drin steht, funktioniert alles wunderbar, falls die Spalte jedoch leer ist, scheint die Abfrage abzubrechen.

Wie müsste das Ganze aussehen, damit wenn "medium_id" leer ist das anschließende
Code:
while($row = mysql_fetch_object($result))
einfach $row->name als leer zurückgibt?

Vielen Dank.
Gruß
Parti
parti02 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.10.2008, 09:14  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Nun du hast verschiedene Möglichkeiten:

PHP-Code:
$result mysql_query("SELECT movies.*, media.* FROM movies, media WHERE movies.movie_id = '".mysql_real_escape_string($_GET['movie'])."' AND media.medium_id = movies.medium_id") or die(mysql_error()); 
PHP-Code:
$result mysql_query("SELECT movies.*, media.* FROM movies, media WHERE movies.movie_id = ".intval($_GET['movie'])." AND media.medium_id = movies.medium_id") or die(mysql_error()); 
Diese beiden Möglichkeiten schützen dich auch gleichzeitig noch vor SQL-Injection. Was das ist und was mysql_real_escape_string und intval machen, das kannst du alles im Netz nachlesen.

Gruß
Cy
cycap ist offline   Mit Zitat antworten
Alt 21.10.2008, 09:45  
Neuer Benutzer
 
Registriert seit: 21.10.2008
Beiträge: 13
parti02 befindet sich auf einem aufstrebenden Ast
Standard

Leider habe ich mit beiden Abfragen immer noch mein altes Problem, wenn ich einen Datensatz abfrage, bei dem "movies.medium_id" leer ist, bekomme ich auch den Rest nicht zu sehen. Die Abfrage scheint abzubrechen.

Gruß
Parti
parti02 ist offline   Mit Zitat antworten
Alt 21.10.2008, 09:51  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Die Abfrage bricht nicht ab, sonder liefert kein Ergebnis, da deine WHERE-Bedingung halt auf keinen Datensatz zutrifft.

Wenn du bei solchen Fällen trotzdem etwas angezeigt haben möchtest (z.B. "Film nicht gefunden") dann kannst du mit mysql_num_rows() Abfragen wieviele Zeilen deine Abfrage zurück gibt und wenn mysql_num_rows() 0 zurück gibt, halt entsprechend darauf reagieren.
cycap ist offline   Mit Zitat antworten
Alt 21.10.2008, 10:40  
Neuer Benutzer
 
Registriert seit: 21.10.2008
Beiträge: 13
parti02 befindet sich auf einem aufstrebenden Ast
Standard

Nun habe ich aber innerhalb "movies" mehrere Spalten, die entweder nicht gesetzt sind, oder falls doch, die genaue Identifizierung aus einer anderen Tabelle geholt werden muss. Dein Vorschlag scheint auf jedenfall mit mehren Datenbankabfragen verbunden zu sein.
Falls
Code:
$result = mysql_query("SELECT movies.*, media.* FROM movies, media WHERE movies.movie_id = '".mysql_real_escape_string($_GET['movie'])."' AND media.medium_id = movies.medium_id") or die(mysql_error());
ausgeführt wurde und mysql_num_rows() = 0 ist frage ich eben nur
Code:
$result = mysql_query("SELECT movies.*, media.* FROM movies, media WHERE movies.movie_id = '".mysql_real_escape_string($_GET['movie']));
ab. Dieses dann aber für 8 Spalten zu erledigen, welche nachdem gleichen Prinzip wie "medium_id" arbeiten ist mir mit zu vielen Abfragen verbunden. Versteh mich nicht falsch, nicht das ich keine Lust hätte sie zu schreiben, ich denke die Datenbank wird einfach unnötig stark belastet, letztendlch wiederholt sich die Prozedur ja für jeden Film der aus "movies" geholt wird.

Lässt dich das SELECT auch so umformulieren das, dass zweite WHERE media.medium_id = movies.medium_id nur Anwendung findet, wenn in movie.medium_id tatsächlich etwas drin steht?
Oder ich eben auch ein Ergenis bekomme, wenn das 2 WHERE nicht zutrifft.

Gruß
Parti
parti02 ist offline   Mit Zitat antworten
Alt 21.10.2008, 10:43  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Sorry dann hab ich dich falsch verstanden. Guck dir mal den LEFT JOIN an, der sollte genau das tun was du vorhast.
cycap ist offline   Mit Zitat antworten
Alt 21.10.2008, 10:58  
Neuer Benutzer
 
Registriert seit: 21.10.2008
Beiträge: 13
parti02 befindet sich auf einem aufstrebenden Ast
Standard

wäre super nett, wenn du mir ein LEFT JOIN mal als Beispiel in meine Abfrage einbauen könntest, habe mir LEFT JOIN bereits angesehen, war mir nicht ganz sicher ob es das ist was brauche, weil ich es nicht so richtig verstanden habe.

Gruß
Parti
parti02 ist offline   Mit Zitat antworten
Alt 21.10.2008, 11:12  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

nöö, mach ich nicht, weil dann kopierst du das einfach und es hat sich für dich erledigt. wenn du es nicht verstanden hast, dann such dir ne andere Seite die es besser erklärt.
cycap ist offline   Mit Zitat antworten
Alt 21.10.2008, 11:27  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Einführung in Joins
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 21.10.2008, 11:34  
Neuer Benutzer
 
Registriert seit: 21.10.2008
Beiträge: 13
parti02 befindet sich auf einem aufstrebenden Ast
Standard

finde ich witzig, du hast wahrscheinlich auch nicht ganz Unrecht.
Danke für den Link @nikosch, ich versuch damit mal mein Glück, aber ich fürchte du wirst wieder was mir hören @cycap.

Vielen Dank ihr beiden.

Gruß
Parti
parti02 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] MySql Frage: Problem mit einer etwas lomplexeren Abfrage tomtaz Datenbanken 5 24.06.2008 22:36
erweiterte abfrage - where DarkManX Datenbanken 2 02.02.2007 17:14
mysql abfrage in Schleife havok PHP Tipps 2006 6 09.05.2006 08:39
Mysql SELECT Abfrage -- Problem mit LIMIT djrace Datenbanken 2 01.05.2006 12:58
Mehrere Werte in WHERE abfrage McNet Datenbanken 6 23.04.2006 02:06
Abfrage bei mySQL 4 ApfeL Datenbanken 5 24.03.2006 18:53
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
[Erledigt] MYSQL Problem Datenbanken 4 09.02.2006 15:14
MySQL Abfrage Problem. web2 PHP Tipps 2005-2 7 25.07.2005 11:07
[Erledigt] MySQL Abfrage fieses Problem Datenbanken 5 21.07.2005 14:19
Problem mit Mysql Abfrage PHP Tipps 2005-2 0 11.07.2005 14:21
[Erledigt] MYSQL Abfrage (mit Optimierter Datenbank) -> PhP Datenbanken 2 02.03.2005 18:50
Mysql Abfrage Datenbanken 4 27.02.2005 22:26
Frage zur MySQL Abfrage Datenbanken 5 04.02.2005 12:31
Problem mit dem WHERE Befehl PHP Tipps 2004 5 08.07.2004 00:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql entweder oder, entweder oder mysql, mysql abfrage where, php leere mysql abfrage, http://www.php.de/datenbanken/48304-mysql-abfrage-problem-mit-where.html, php mysql probleme abfrage leere tabelle, mysql abfragen where, mysql abfrage where entweder oder, wie viele abfragen in mysql, php mysql entweder oder, php product search listing, mysql select bedingung zutrifft nicht zutrifft, mysql entweder oder suchen, mysql where abfrage, mysql komplexe join abfragen, mysql join where in leer fehler, mysql 2 abfragen entwerder oder, mysql where entweder oder, entweder oder abfrage mysql, select abfrage entweder oder

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum