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 13-09-2003, 20:23
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Standard [MSSQL] select anweisung

ich bekomme einfach die passende select anweisung nicht hin. wäre schön wenn mir jemand helfen könnte.

also, ich habe 3 tabellen:

Cocktail mit den attributen - cocktailnummer (prim_key), bild, art, name

Zutaten mit den attributen - zutatennummer (prim_key), name, art,
alkoholgehalt, preis

Zugehörigkeit mit den attributen - cocktailnummer (prim_key), zutatennummer
(prim_key), menge

ich will eine suchfunktion in meine seite integrieren. das problem ist
jetzt folgendes: es werden 2 (oder mehr) zutaten in das suchfeld durch "AND"
getrennt eingegeben. es sollen alle cocktails ausgegeben werden in denen ALLE
gesuchten zutaten drin sind. (kein entweder/oder). wie lautet die dazu
passende sql anweisung???

danke
Tomislaw
Mit Zitat antworten
  #2 (permalink)  
Alt 13-09-2003, 21:56
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

also deine tabelle 'zugehörigkeit' kann schon mal nicht stimmen.

ES KANN KEIN PRIMARY KEY ZWEIMAL VERWENDET WERDEN!!!

ansosten sähe deine query so aus.
Code:
SELECT
    *
FROM
    zugehoerigkeit Z
        LEFT JOIN cocktail  C ON (C.cocktailnummer = Z.cocktailnummer)
        LEFT JOIN attribute A ON (A.zutatennummer  = Z.zutatennummer)
WHERE
    A.name = 'ananas' AND
    A.name = 'zitrone'
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #3 (permalink)  
Alt 14-09-2003, 00:57
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Standard

danke erstmal für die antwort.

zu der primary key sache:
die entities sind doch aber nur durch cocktailnummer und zutatennummer zusammen eindeutig bestimmt. mysql hatte kein problem damit 2 attribute im primary key anzugeben. sollte man da noch eine zugehörigkeits id vergeben?

der angegebene code funktioniert bei mir nicht wirklich. die ergebnismenge ist immer leer. die tabelle attribute soll wohl meine zutatentabelle sein
und SELECT * FROM zugehörigkeit habe ich mal in
SELECT * FROM cocktail umgedeutet (da ich ja die cocktailnamen haben will und diese in der tabelle cokctail sind).
leider habe ich keine ahnung was ein left join veranstaltet. da werde ich mal versuchen mich schlau zu machen...
Mit Zitat antworten
  #4 (permalink)  
Alt 14-09-2003, 10:22
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

ok. die attribute waren in der tat die zutaten.....

aber warum änderst du zugehoerigkeit???? du hast eine tabelle, in der die ids aus cock... und zut... stehen. und die wird in meinem beispiel abgefragt. wenn dort nun nichts drin ist, kann auch nicht gezeigt werden.

man kann die abfrage auch anders darstellen. das geht auch ....
Code:
SELECT
    *
FROM
    cocktail  C 
        LEFT JOIN ON zugehoerigkeit Z (C.cocktailnummer = Z.cocktailnummer)
            LEFT JOIN zutaten Z ON (Z.zutatennummer = A.zutatennummer)
WHERE
    Z.name = 'ananas' AND
    Z.name = 'zitrone'
aber bitte ändere keine tabellennamen, wenn du nichts weisst, was du tust.

alternativ zum test, solltest du auch mal das ganze WHERE entfernen.
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #5 (permalink)  
Alt 14-09-2003, 19:01
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hmm, phpmyadmin sagt bei deinem letzten code:
u have an error in your sql statement!

und irgendwie hast du für zutaten und zugehoerigkeit auch die selbe abkürzung (nämlich Z) benutzt.
ich werde mich aber davor hüten jetzt irgendwelche änderungsvorschläge zu unterbreiten

wenn ich das "where" weglasse, die reihenfolge von "ON" und zugehoerigkeit Z vertausche, sowie zutaten A benutze
dann ist das ergebnis eine riesen tabelle in der alle 3 tabellen aneinandergehängt wurden.
mit "where" ist die ergebnismenge leer, obwohl ich sicher bin, daß es einen cocktail mit diesen 2 zutaten gibt.


Mit Zitat antworten
  #6 (permalink)  
Alt 17-09-2003, 01:45
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Lightbulb

also ich hab mich mal ein wenig schlau gemacht (und schlau machen lassen) und bin auf folgende sql anweisung bei meinem obigen problem gekommen :

Code:
SELECT DISTINCT c.name
FROM cocktail c, zugehoerigkeit zg
WHERE (
(
c.cocktailnummer = zg.cocktailnummer
) AND (
zg.cocktailnummer
IN (

SELECT zg.cocktailnummer
FROM zugehoerigkeit zg, zutaten z
WHERE (
(
zg.zutatennummer = z.zutatennummer
) AND (
z.name = "ananas"
)
)
)
) AND (
zg.cocktailnummer
IN (

SELECT zg.cocktailnummer
FROM zugehoerigkeit zg, zutaten z
WHERE (
(
zg.zutatennummer = z.zutatennummer
) AND (
z.name = "minze"
)
)
)
)
)
leider meldet phpmyadmin immer noch einen fehler. sieht da jemand was verdächtiges?
auf mysql.de meine ich gesehen zu haben, daß sub-select nach einem "IN" erlaubt ist. ich benutzt mysql 4.0.13

mille grazie
Mit Zitat antworten
  #7 (permalink)  
Alt 17-09-2003, 09:11
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

kann es sein, dass der subselect erst ab mysql4.1 erlaubt ist? meine ich nämlich.
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #8 (permalink)  
Alt 17-09-2003, 16:48
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Standard

erst ab 4.1? das ist aber schlecht.
wie kann man den query denn umformulieren, so daß er bei mir funktioniert?
Mit Zitat antworten
  #9 (permalink)  
Alt 17-09-2003, 17:37
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

erstelle eine query für den subselect.
lies die daten aus und sende eine zweite query an die DB.
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #10 (permalink)  
Alt 20-09-2003, 17:33
Tomislaw
 Newbie
Links : Onlinestatus : Tomislaw ist offline
Registriert seit: Sep 2003
Beiträge: 6
Tomislaw ist zur Zeit noch ein unbeschriebenes Blatt
Standard

okay, ich habs hinbekommen.

für jede zutat (also jeden sub-query) eine temp table erzeugen und dann einen natural join ueber cocktail und alle temp tables.

vielen dank fuer die hilfe
Mit Zitat antworten
Antwort

Lesezeichen


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

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

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

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


 

Aktuelle PHP Scripte

Plates native PHP template system

Plates ist ein natives PHP-Vorlagensystem, das schnell, einfach zu verwenden und einfach zu erweitern ist.

24.05.2019 Berni | Kategorie: PHP/ Framework
Maqetta Open Source  HTML5-Editor ansehen Maqetta Open Source HTML5-Editor

Einen WYSIWYG-Editor zur visuellen Erstellung von Userinterfaces in HTML5 (Drag-and-Drop)

13.05.2019 Berni | Kategorie: HTML5/ EDITOR
NodeBB

NodeBB ist eine Foren-Software auf NodeJS-Basis

13.05.2019 Berni | Kategorie: PHP/ Forum PHP Software
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:28 Uhr.