php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.07.2005, 20:29  
Gast
 
Beiträge: n/a
Standard [Erledigt] MySQL Abfrage fieses Problem

Hallo zusammen,

ich habe bereits versucht mit Hilfe der Suchfuntion hier im Forum eine Antwort zu bekommen, jedoch keine direkte Antwort für mein Problem bekommen. Ich hoffe Ihr könnt mir weiterhelfen.

Das Problem:
Es existieren 2 Tabellen: PRODUCT und PRODUCT_ATTR
In der Tabelle PRODUCT stehen "Stammdaten" also z.B. der Name eines Produktes. Die Datensätze werden in dieser Tabelle durch die PRODUCT_ID eindeutig gekennzeichnet. In der Tabelle PRODUCT_ATTR stehen Attribute (Eigenschaften) für die Produkte aus der Tabelle PRODUCT. Die PRODUCT_ID ist Fremdschlüssel in der Tabelle PRODUCT_ATTR.

PRODUCT:

ID_PRODUCT | NAME | REFCODE | PRODUCT_NUMBER | TYPE
-----------------------------------------------------------------------------------
3105 | Füller1 | GH-HZ1 | 653673 | VG
3106 | Füller2 | GH-HZ2 | 653677 | VG
3107 | Füller3 | GH-HZ3 | 653678 | ZH
3108 | Füller4 | GH-HZ4 | 653673 | VG
...usw


PRODUCT_ATTR

ID_ATTR | ID_PRODUCT | NAME | TYPE
---------------------------------------------------------------------------------
1221 | 3105 | Karton | Verpackung
1222 | 3105 | Höhe | tech_data
1223 | 3106 | Folie | Verpackung
...usw

Eine Abfrage auf die beiden Tabelle sollen nun ALLE Produkte vom TYPE VG aus der Tabelle PRODUCT ausgeben die über eine Verpackung verfügen (manche Produkte haben keine Verpackung diese sollen aber trotzdem ausgegeben werden. Die Verpackung befindet sich in der Tabelle PRODUCT_ATTR in der Spalte NAME. Der NAME muss vom TYPE Verpackung sein.

Hier mein Code:
Zitat:

$sql_statement="SELECT PRODUCT.ID_PRODUCT, PRODUCT.PRODUCT_NUMBER, PRODUCT.NAME, PRODUCT.REFCODE, PRODUCT.TYPE, PRODUCT_ATTR.ID_PRODUCT, PRODUCT_ATTR.TYPE, PRODUCT_ATTR.NAME AS NAME2 FROM PRODUCT LEFT JOIN PRODUCT_ATTR ON PRODUCT.ID_PRODUCT = PRODUCT_ATTR.ID_PRODUCT WHERE PRODUCT.TYPE = 'VG' AND PRODUCT_ATTR.TYPE='Verpackung' ORDER BY PRODUCT.PRODUCT_NUMBER";
Die Schwierigkeit: Es kann sehr wohl sein, dass ein Produkt aus der Tabelle PRODUCT einen Datensatz von einem anderen TYPE besitzt z.B. technische Daten. Die SQL Abfrage muss also Produkte finden, die einen Datensatz vom TYPE Verpackung haben, falls für das Produkt keine Verpackung vorhanden trotzdem ausgeben.

VIELEN DANK IM VORAUS

JOSH
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.07.2005, 20:41  
Gast
 
Beiträge: n/a
Standard

Habe ich nicht verstanden.

Ist die Bedingung:
"entweder ein Datensatz vom Typ Verpackung vorhanden (dann ist es egal, ob evtl. noch weitere zugeordnete Attribute existieren)
oder überhaupt keine zugeordneten Attribute"
?
  Mit Zitat antworten
Alt 20.07.2005, 20:57  
Gast
 
Beiträge: n/a
Standard

Es sollen Produkte ausgegeben werden die eine Verpackung zugeordnet haben. Hat ein Produkt keine Verpackung soll es auch ausgegeben werden halt mit dem Wert NULL.

hast du das gemeint?

also, wenn eine ID_PRODUCT (aus PRODUCT) einen Eintrag in der Tabelle PRODUCT_ATTR hat und dieser auch noch dem TYPE Verpackung entspricht gebe das Feld ID_PRODUCT, NAME (aus PRODUCT_ATTR also z.B. Karton), REFCODE aus.
Falls eine ID_PRODUCT (aus PRODUCT) einen Eintrag in der Tabelle PRODUCT_ATTR hat aber keinen vom TYPE Verpackung so gebe ID_PRODUCT, NAME (ist jetzt NULL) und REFCODE aus.
Hat die ID_PRODUCT überhaupt keinen Eintrag in PRODUCT_ATTR so gebe ID_O_PRODUCT, NAME (ist NULL) und REFCODE aus.

vielen dank
josh
  Mit Zitat antworten
Alt 20.07.2005, 21:29  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

guck dir mal die syntax von
IF(bedingung,true,false) und CASE WHEN bla THEN blu ELSE bloh END an - damit wirst du wahrscheinlich deine bedingungen selbst hinbekommen.

wenn du lesbaren sql-code produzieren willst, solltest du die abfragen mehrzeilig und eingerückt schreiben.

grüße
axo
axo ist offline   Mit Zitat antworten
Alt 20.07.2005, 21:39  
Gast
 
Beiträge: n/a
Standard

Du willst also einfach alle Produkte haben, ggf. mit zugeordneten Attributen.

Such Dir mal was zu LEFT JOIN und RIGHT JOIN raus, z.B. http://www.w3schools.com/sql/sql_join.asp
Das leistet genau das. Gibt es keinen passenden Eintrag in der jeweils nachrangigen Tabelle, wird der Datensatz der vorrangigen Tabelle einmal als Ergebnisdatensatz übernommen; die Felder der anderen Tabelle werden dabei auf NULL gesetzt.
Deine vorrangige Tabelle sind Deine Produkte, die nachrangige die Attribute.
  Mit Zitat antworten
Alt 21.07.2005, 14:19  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

IS NULL dürfte das eigentliche Thema sein. Da ja der JOIN nicht über den Typ geht, muss das noch separat abgefragt werden.:
Code:
SELECT 
    p.ID_PRODUCT, 
    p.PRODUCT_NUMBER, 
    p.NAME, 
    p.REFCODE, 
    p.TYP, 
    a.ID_PRODUCT, 
    a.TYP, 
    a.NAME AS NAME2 
FROM PRODUCT p
LEFT JOIN PRODUCT_ATTR  a ON p.ID_PRODUKT = a.ID_PRODUCT
WHERE p.TYP = 'VG' 
AND (a.TYP = 'Verpackung'  OR a.TYP IS NULL)
ORDER BY p.P_NUMBER
Da TYPE ein reserviertes Wort ist, hab ich es jeweils mit TYP ersetzt.
__________________
Gruss
L
lazydog 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
mysql problem mit LIKE und AND kazuya Datenbanken 10 29.10.2007 21:36
mysql Abfrage Problem mit dem Join test022 Datenbanken 5 28.04.2007 08:07
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
komplizierte mysql abfrage php_frage PHP Tipps 2007 5 28.12.2005 17:55
problem bei ausgabe einer abfrage aus 2 Tabellen Lia PHP Tipps 2005-2 2 28.07.2005 17:30
MySQL Abfrage Problem. web2 PHP Tipps 2005-2 7 25.07.2005 11:07
Problem mit Mysql Abfrage PHP Tipps 2005-2 0 11.07.2005 14:21
Problem mit mysql abfrage maximus PHP Tipps 2005 4 16.05.2005 19:56
Frage zur MySQL Abfrage Datenbanken 5 04.02.2005 12:31
Abfrage Problem suter PHP Tipps 2005 21 19.01.2005 11:46
[Erledigt] MySQL -Abfrage Datenbanken 2 17.01.2005 11:24
mit mysql und php eine datenbank erstellen? Großes Problem PHP Tipps 2004-2 1 16.12.2004 14:53
[Erledigt] Problem mit PHP und MYSQL Datenbanken 6 01.08.2004 05:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php wie produktliste aus mysql, mysql abfrage artikel technische daten, php mysql abfrage produktliste erstellen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:39 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.