Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Innerhalb eines select's prüfen ob Spalte existiert? (https://www.delphipraxis.net/99140-innerhalb-eines-selects-pruefen-ob-spalte-existiert.html)

thabaker 7. Sep 2007 10:59

Datenbank: MySQL • Zugriff über: PHP

Innerhalb eines select's prüfen ob Spalte existiert?
 
Ich möchte in einer SQL Abfrage verschiedene Felder benutzen, die aber nicht notwendigerweise existieren müssen (verschiedene Datenbanken). Nun wollte ich fragen ob man z.B. im WHERE-Clause eine Abfrage vorschalten kann: Existiert Spalte->ja, dann prüfe ob Spalte > 100. Sonst gibts ja immer den Fehler unknown column...

also so was: WHERE... (IF EXISTS( Spalte1, 'SPALTE1>100'))

//edit: ich weiß dass es besser wäre eine homogene Tabellenstruktur zu haben, nur Kunde ist König... :wall:

angos 7. Sep 2007 11:22

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Hi,


hmmm... wüsste keine direkte Lösung.. Schreib doch selber ne Funktion die das prüft:

Delphi-Quellcode:
function teste_ob_spalte_da($spalte, $tabelle)

  $sql = ' SELECT '.$spalte.' FROM '.$tabelle;
  mysql_query($sql);
 
  return !(mysql_error());
}
ist zwar nicht schön, weil du trotzdem nen sql-error auslöst, aber der wird nicht gezeigt...

[edit]nicht getestet, sollte aber gehen[/Edit]

Gruß

thabaker 7. Sep 2007 11:26

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Das habe ich auch schon versucht ;) aber bei meinem Framework ist das Problem dass die SQL-Statements gespeichert aus der Datenbank kommen können, bzw im Script definiert werden bevor die Konfiguration der Datenbank geladen wird. hatte sonst schon "DESCRIBE tabelle spalte" im Kopf.

mschaefer 7. Sep 2007 12:02

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Min, moin,

würde eine Select-Anweisung senden die keine Datenmenge zurückgibt und nur die vorhandene Feldliste ausgibt.
SQL-Code:
SELECT * FROM MyTable WHERE 1=2
Die Feldnamen könnten in eine Stringliste eingelesen werden. Daraus kann dann die eigentliche SQL gebaut werden.

Grüße // Martin


PS: Ist nicht schön, aber DB-unabhängig.

DeddyH 7. Sep 2007 12:22

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Kannst Du das nicht vorab in PHP prüfen? mysql_list_fields()

Kedariodakon 7. Sep 2007 12:28

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Ich kenn mich jetzt nicht so mit MySQL aus, aber in MSSQL gibt es Systemtabellen, aus welchen man das ganz einfach auslesen kann...
Bei MySQL wird es nicht viel anders sein.

Daraus macht man dann einfach ne SP, da nicht jeder Rechte auf die System Tabellen erhalten sollte. fertig.

Bye Christian

thabaker 7. Sep 2007 12:45

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Danke für die ganzen Tipps, aber sie haben alle gemeinsam:
- dass eine MySQL Verbindung existieren muss (was nicht der FAll ist)
- dass ein PHP Skript die Abfrage zusammenbaut (was nicht sein muss, Statement kann aus der DB kommen, wenn dann eine Verbindung existiert)

Ablauf:
- laden der wichtigsten SQL-Statements aus einer Datei
- laden der Datenbankverbindungsdaten
- Herstellen der Verbindung
- Abfragen von weiteren SQL-Statements aus der DB

// ich lade jetzt je nach Projekt die passenden SQLs nach. Geht auch, erfordert nur mehr Organisation

angos 7. Sep 2007 15:08

Re: Innerhalb eines select's prüfen ob Spalte existiert?
 
Zitat:

Zitat von thabaker
[...]- dass eine MySQL Verbindung existieren muss (was nicht der FAll ist)[...]

Wie willst du abfragen ob ein Feld in einer Tabelle in einer Datenbank existiert, wenn keine Verbindung zu der Datenbnak existiert. Das entbehrt doch jeder Logik :gruebel: Du kannst dir auch keinen Döner von um der Ecke holen, wenn der Laden dicht hat


Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz