MySQL abfrage verbinden...
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
abfragen
auslese
bevorzugen
code
datenbank
devise
einarbeiten
fassen
frage
http
klar denken
not
null
ordern
resultat
schritt
sprache
tabelle
url
-
Guten Morgen,
ich weiß nicht so recht weiter, vielleicht liegt es daran, das ich nun schon 48 Std. wach bin und nicht mehr klar denken kann.
Nun zu meiner Frage:
Ich habe eine Datenbank die für Übersetzungen genutzt wird, in einem kleinen CMS. Nun möchte ich möglichst wenige SQL abfragen machen und die Daten zusammen Fassen:
Ich möchte, gerne das die Informationen für jede Sprache die angelegt wurde, ausgelesen wird. Gehen wir davon aus das ich nun 3 Sprachen habe, de für deutsch, en für englisch und fr für französisch.
Meine Tabelle sieht so aus:
Die Seiten die zusammen gehören, werden mit dem gleichen "ident" abgelegt.CREATE TABLE IF NOT EXISTS `pages` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(150) COLLATE utf8_unicode_ci DEFAULT NULL, `body` text COLLATE utf8_unicode_ci, `lang` varchar(5) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'de', `slug` varchar(300) COLLATE utf8_unicode_ci DEFAULT NULL, `DATE` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL, `order` smallint(5) unsigned zerofill NOT NULL DEFAULT '00000', `ident` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), KEY `slug` (`slug`(255)), KEY `lang` (`lang`), KEY `order` (`order`), KEY `ident` (`ident`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;
Nun möchte ich gerne eine Tabelle machen, in der aufgelistet wird, welche Sprachen eine Seite bereits besitzt.
Nehmen wir dazu an das für die Startseite ein Eintrag mit lang = de besteht, so möchte ich angezeigt bekommen, das DE bereits enthalten ist.
ebenso möchte das wenn DE und EN bestehen, das beide als vorhanden angezeigt werden.
Gibt es da ne Möglichkeit? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
SELECT lang FROM pages WHERE ident = XXX
Dann schnell mit ner while durch und du hast sie :)
Mit einer Abfrage wird es komplizierter, ist halt die Frage was schneller wäre:
SELECT pages.lang AS de, pages2.lang AS en, pages3.lang AS fr FROM pages LEFT JOIN pages AS pages2 ON pages2.ident = pages.ident AND pages2.lang = 'en' LEFT JOIN pages AS pages3 ON pages3.ident = pages.ident AND pages3.lang = 'fr' WHERE ident = XXX AND lang = 'de'
Ungetestet...
Ich würde aber definitiv Variante 1 bevorzugen, ist bestimmt schneller und auch angenehmer zu warten,
außerdem ist dort dann auch die Erweiterbarkeit auf andere Sprachen gegeben ohne neue Programmierungen.
Beitrag zuletzt geändert: 1.3.2012 10:22:22 von sneppa -
Ich glaube auch, das ich Variante nutze, die habe ich auch schon drin.
Habe gedacht es gibt vllt noch ne einfachere Methode um das in einer Query zu erledigen ohne das ich später für jede neue Sprache die SQL anpassen muss.
Danke dir Sneppa! -
Nun ja, SQL-Abfragen sind verbindbar, sodass du nicht erst die ganze Tabelle auf den Client ziehen und diese dann mit der Programmlogik sortieren musst.
Dazu gibts das Schlüsselwort "Join". Weiters kannst du kaskadierte Abfragen machen wo das Resultat einer Abfrage direkt als Filder einer anderen verwendet werden kann.
Möglichkeiten gibts viele, aber einarbeiten muss man sich halt, wobei ich sagen muss, dass ich ein Semester lang SQL hatte und es nicht unbedingt einfach ist. Schritt für Schritt heißt die Devise. Zuerst muss die Syntax sitzen, sodass du Anbfragen auf Kommando-Zeile zustande bringst... -
Ihr braucht hier eigentlich nicht mehr SPAMMEN...
Nur gut das ich alten Code nicht lösche, habe für mein Problem auf eine bereits geschriebene Lösung zurück gegriffen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage