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 25-05-2011, 09:31
Lennynero
 Registrierter Benutzer
Links : Onlinestatus : Lennynero ist offline
Registriert seit: Sep 2007
Beiträge: 121
Blog-Einträge: 1
Lennynero ist zur Zeit noch ein unbeschriebenes Blatt
Standard Wert aus der äußeren Query in der Sub-Subquery nutzen

Hi,
ich habe gerade ein Problem mit einer verschatelten Query:

Code:
SELECT
  a.id,
  a.name,
  b.b_id,
  b.preis,
  c.bezeichnung,
  (SELECT
     GROUP_CONCAT(b_inner.preis)
   FROM
     a_inner
   JOIN
     a_inner.id = b_inner.b_id
   JOIN
     (SELECT
        x.a_id
        x.bezeichnung
      FROM
        x
     WHERE 
        x.name = a.name) AS c_inner
    WHERE 
       a_inner.id = a.id) AS vergleich
FROM
  a
JOIN
  b
ON
  a.id = b.a_id
JOIN
  (SELECT
     a_id
      bezeichnung
   FROM
      x
  WHERE 
     wert = 1) AS c
  ON a.id = c.a_id
An der Stelle "x.name = a.name" habe ich das Problem, das MySQL dort die Spalte "a.name" nicht kennt (Unknown column 'a.name' in where clause).

Gibt es einen Trick wie ich da drankomme oder muss ich mir einen Umweg über die mittlere Query bauen?

Geändert von Lennynero (25-05-2011 um 12:16 Uhr) Grund: Kommas nachgetragen
Mit Zitat antworten
  #2 (permalink)  
Alt 25-05-2011, 11:57
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

diese Abfrage ist einfach ungültig. Die Spaltenreferenzen sind nicht durch Komma getrennt, eine Unterabfrage als Spaltenreferenz ist auch irgendwie unsinnig. Das kann gar nicht funktionieren.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 25-05-2011, 12:14
Lennynero
 Registrierter Benutzer
Links : Onlinestatus : Lennynero ist offline
Registriert seit: Sep 2007
Beiträge: 121
Blog-Einträge: 1
Lennynero ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sorry, habe die Kommatas einfach vergessen.

Und die Referenz ist ja nicht die Unterabfrage, sondern eine der Spalten aus der äußeren Abfrage sol Bezugspunkt für die Sub(sub)query sein.

Das funktioniert z.B. mit "a_inner.id = a.id" ja auch.

Ersetzte ich bei "x.name = a.name" z.B. "a.name" durch einen festen Wert, funktioniert es.

Unsinnig: die ursprüngliche Query ist noch etwas komplexer, beinhaltet aber genau die gleiche Logik.

Ich habe eine Abfrage und Suche zu dem Ergebnis passende Referenzwerte. Diese werden im Grunde genauso aufgebaut wie die Werte der eigentlichen Query und müssen dann eben noch einen Bezug zu der Zeile haben, in der sie abgefragt werden (was mit Subqueries ja auch super funktioniert). Klar, mit "GROUP_CONCAT" erhalte ich da ein übles Konstrukt, aber ich habe den Vorteil das ich die Abfrage in meiner Klasse anpasse und das Ergebnis relativ einfach ohne große weitere Logik ausgeben kann.
Mit Zitat antworten
  #4 (permalink)  
Alt 25-05-2011, 20:13
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ich bin der Meinung, dass man das Problem auch mit ordentlichen Joins lösen kann (auch wenn ich es jetzt auf Anhieb und ohne die Bedeutung der einzelnen Spalten zu kennen nicht komplett nachvollziehen kann). Korrelierte Unterabfragen sind ein Performance-Problem und auch die Lesbarkeit ist bei deiner Verschachtelung im Eimer.

Versuch's mal mit den Joins.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 26-05-2011, 09:30
Lennynero
 Registrierter Benutzer
Links : Onlinestatus : Lennynero ist offline
Registriert seit: Sep 2007
Beiträge: 121
Blog-Einträge: 1
Lennynero ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Ich bin der Meinung, dass man das Problem auch mit ordentlichen Joins lösen kann (auch wenn ich es jetzt auf Anhieb und ohne die Bedeutung der einzelnen Spalten zu kennen nicht komplett nachvollziehen kann). Korrelierte Unterabfragen sind ein Performance-Problem und auch die Lesbarkeit ist bei deiner Verschachtelung im Eimer.

Versuch's mal mit den Joins.

Ich generiere eine Preisliste, die bestimmten Bedingungen unterliegt (die sind im Detail aber bei meinem Problem unwichtig).

Zu jedem Eintrag möchte ich aber noch angezeigt bekommen wenn für den gleichen Anbieter ähnliche Produkte aber mit anderem Preis vorliegen (die Bedingungen sind sonst die gleichen wie bei der äußeren Abfrage).

Das können NULL bis n verschiedene Produkte sein, weshalb ich mit GROUP_CONCAT (und im original nutze ich noch CONCAT um Produkt und Preis zusammenzusetzen) die entsprechenden Werte in ein Feld schreibe, das ich im (PHP)-Ausgabeskript auswerten kann.

Die gleiche Methode (in der diese Abfrage sitzt) wird aber noch an anderen Stellen genutzt, weshalb eine komplette Änderung der Abfrage nicht in Frage kommt.

Performance: in der Testumgebung brauchte das neue Skript knapp 150% der Zeit die das "Original"-Skript benötigt. Alternativ hätte ich auch beim durchlaufen des PHP Skriptes eine neue Methode aufrufen in der ich dann eine weitere Abfrage ausführen, was sich von der benötigten Zeit nicht viel gegeben hat.

Lesbarkeit: in meiner Entwicklungsumgebung ist das durchaus noch lesbar und im Grunde ist das doch auch nichts anderes wie eine drefache Verschachtelung.
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
MySQL, resultat direkt im Query nutzen? fabio SQL / Datenbanken 4 13-07-2010 20:04
[gelöst] Autoincrement - Wert auch zur Stringverküpfung in einem anderen Feld nutzen sanktusm SQL / Datenbanken 12 29-10-2009 14:26
In einem Query einen Wert auslesen und direkt als Value einfügen nohfreak SQL / Datenbanken 6 03-03-2008 15:20
Sql Subquery ? JR-EWING SQL / Datenbanken 11 07-09-2007 13:47
auslesen des quellcodes eines äußeren frames TheDoode Apps und PHP Script Gesuche 2 22-08-2001 12:03

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 09:17 Uhr.