php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 28-02-2011, 23:48
MPC
 Registrierter Benutzer
Links : Onlinestatus : MPC ist offline
Registriert seit: Feb 2011
Beiträge: 5
MPC befindet sich auf einem aufstrebenden Ast
Standard Problem mit einer Datenbankabfrage


Hab da mal ein Problem und komm absolut nicht weiter. Vielleicht hat ja
einer von euch einen Lösungsansatz.

So, versuch ich noch mal zu erklären was für ein Problem ich habe.
In eine Tabelle Namens userliste_db können User ihre eigene Modelle
eintragen. Die Liste kann dann vom User aufgerufen werden und er
bekommt dann eine Auflistung seiner Modelle. Das mach ich mit:

PHP-Code:
$result_typ mysql_query("SELECT * FROM userliste_db WHERE 
userid = '{$_GET['userid']}'"
);
while(
$row_typ mysql_fetch_row($result_typ)){ 

Diese Funktion haben auch sehr viele schon genutzt und es befinden sich
ca. 6000 Einträge in der Tabelle.

Hier mal ein Auszug der userliste_db:
id interne typ Artikelnr userid
1 5 Audi A4 DTM 50364-040 1
2 5 Audi A4 DTM 50364-050 1
381 5 Audi A4 DTM 50364-050 2
128 5 Audi A4 DTM 50364-040 3
129 5 Audi A4 DTM 50364-050 3
5032 5 Audi A4 DTM 50364-040 4
5031 5 Audi A4 DTM 50364-050 4
962 5 Audi A4 DTM 50364-050 5
1155 5 Audi A4 DTM 50364-040 8
1156 5 Audi A4 DTM 50364-050 8
1156 5 Audi A4 DTM 50364-090 10

Wie man sieht taucht eine Artikelnr. mehrfach auf.
Nun wollten viele eine Abfrage wo sie angezeigt bekommen welche Modelle
(Artikelnr) ihnen noch fehlen. Das wollte ich mit dieser Abfrage erreichen:

PHP-Code:
$result_typ mysql_query("SELECT * FROM userliste_db WHERE NOT
userid = '{$_GET['userid']}'"
);
while(
$row_typ mysql_fetch_row($result_typ)){ 

Das Problem dabei ist, das die Artikelnr auch angezeigt werden die der
User (userid) schon hat.
z.b.: Mit der userid 1 bekomm ich folgende Ausgabe
3 * 50364-040
5 * 50364-050
1 * 50364-090
sollte aber eigentlich nur 1 * 50364-090 sein, da die userid 1 die anderen
zwei Artikelnr. schon hat. Da aber bei den anderen Artikelnr nicht die
userid 1 steht bekomm ich halt alle angezeigt. Deswegen dachte ich mir,
das man die Artikelnr ausfiltern kann. Es sollen immer nur die Artikelnr
erscheinen die der User (userid) nicht hat und die sollten auch nicht
doppelt erscheinen. Mit DISTINCT hatte ich es auch schon probiert,
allerdings ohne Erfolg. Hat jemand vielleicht eine Idee wie ich das
umsetzen kann?

Ich sag schonmal Danke im vorraus
Mit Zitat antworten
  #2 (permalink)  
Alt 28-02-2011, 23:52
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Das Gegenteil von = ist !=. Das NOT hat da nichts verloren.

Es fehlt übrigens das sehr wichtige SQL-Escaping, ohne dem dein Code sehr anfällig für gefährliche SQL-Injections ist.

SELECT * sollte man nicht verwenden, sondern immer die Spalten angeben, die man haben will.
Mit Zitat antworten
  #3 (permalink)  
Alt 01-03-2011, 00:33
MPC
 Registrierter Benutzer
Links : Onlinestatus : MPC ist offline
Registriert seit: Feb 2011
Beiträge: 5
MPC befindet sich auf einem aufstrebenden Ast
Standard

Damit != habe ich es auch schon probiert. Trotzdem werden mir die Artikelnr. mehr-
fach angezeigt. Den Code habe ich nur zusammengeschrumpft damit es übersicht-
sichtlich bleibt. Das mysql_real_escape_string ist auch vorhanden.
Bevor das auf meinen Server kommt, wird alles wieder eingebaut. Im Moment geht es
ja nur darum die Abfrage so hinzubekommen wie ich es schon geschrieben habe.
Trotzdem Danke für den Hinweis
Mit Zitat antworten
  #4 (permalink)  
Alt 01-03-2011, 00:40
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
$result mysql_query("
    SELECT DISTINCT t1.artikelnr
    FROM userliste_db t1
    LEFT JOIN userliste_db t2 ON ( t1.artikelnr = t2.artikelnr AND t2.userid = " 
. (int)$_GET['userid'] . " )
    WHERE t2.artikelnr IS NULL
"
); 
Mit Zitat antworten
  #5 (permalink)  
Alt 01-03-2011, 12:52
MPC
 Registrierter Benutzer
Links : Onlinestatus : MPC ist offline
Registriert seit: Feb 2011
Beiträge: 5
MPC befindet sich auf einem aufstrebenden Ast
Standard

Respekt und vielen Dank

Hatte schonmal mit LEFT JOIN gebastelt und dazu noch eine andere Tabelle genutzt:
SELECT
detail_db.Artikelnr,
userliste_db.interne,
userliste_db.typ,
userliste_db.userid
FROM detail_db
LEFT JOIN
userliste_db ON detail_db.Artikelnr=userliste_db.Artikelnr

Hatte aber leider nicht zu dem Ergebnis geführt.

Zwei Fragen hätte ich aber noch ;-)
Die Abfrage bringt eine sehr hohe Systemlast, kann man das irgendwie optimieren?
Wie kann ich da jetzt noch einen count einbauen um mir anzeigen zulassen wieviele
Datensätze er ausgibt?
Mit Zitat antworten
  #6 (permalink)  
Alt 01-03-2011, 12:56
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von MPC Beitrag anzeigen
Zwei Fragen hätte ich aber noch ;-)
Die Abfrage bringt eine sehr hohe Systemlast, kann man das irgendwie optimieren?
Einen Index setzen hilft meistens. EXPLAIN gibt darüber Auskunft, was so lange dauert.

Zitat:
Zitat von MPC Beitrag anzeigen
Wie kann ich da jetzt noch einen count einbauen um mir anzeigen zulassen wieviele
Datensätze er ausgibt?
COUNT(DISTINCT t1.artikelnr)
Mit Zitat antworten
  #7 (permalink)  
Alt 01-03-2011, 13:14
MPC
 Registrierter Benutzer
Links : Onlinestatus : MPC ist offline
Registriert seit: Feb 2011
Beiträge: 5
MPC befindet sich auf einem aufstrebenden Ast
Standard

Sorry wenn ich nerve, das mit dem COUNT(DISTINCT t1.artikelnr) versteh
ich gerade nicht. Wo müßte ich das denn einbauen? Anbei mal Deine
Abfrage, hab sie noch um zwei Spalten erweitert, da ich diese
Informationen auch noch benötige.

PHP-Code:
$result mysql_query("
    SELECT DISTINCT t1.artikelnr, t1.typ, t1.interne
    FROM userliste_db t1
    LEFT JOIN userliste_db t2 ON ( t1.artikelnr = t2.artikelnr AND t2.userid = " 
. (int)$_GET['userid'] . " )
    WHERE t2.artikelnr IS NULL
"
);  
while(
$row_typ mysql_fetch_row($result)){ 
Hier erfolgt die Ausgabe

Mit Zitat antworten
  #8 (permalink)  
Alt 01-03-2011, 13:17
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.578
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Suchst du mysql_num_rows()?

PHP: mysql_num_rows - Manual
Mit Zitat antworten
  #9 (permalink)  
Alt 01-03-2011, 13:36
MPC
 Registrierter Benutzer
Links : Onlinestatus : MPC ist offline
Registriert seit: Feb 2011
Beiträge: 5
MPC befindet sich auf einem aufstrebenden Ast
Standard



Das passiert, wenn man vor lauter Bäumen den Wald nicht mehr sieht

Auf jedenfall und nochmal vielen Dank.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ergebnisse einer Datenbankabfrage als Links ausgeben reiner3000 PHP Developer Forum 0 15-05-2008 08:25
Ausgabe der Ergebnisse einer Datenbankabfrage mit SUM() elf7013 PHP Developer Forum 2 05-06-2006 12:39
mailen einer while-schleife aus einer datenbankabfrage webmoehre PHP Developer Forum 18 27-11-2004 21:07
Ausgabe einer Datenbankabfrage Benji SQL / Datenbanken 4 24-06-2003 13:24
Datenbankabfrage in Code einer Seite integrieren Philipp PHP Developer Forum 11 16-10-2002 15:50

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:53 Uhr.