Antworten auf deine Fragen:
Neues Thema erstellen

Mysql Eine Abfrage über mehrere Zeilen

AxelM

Nicht mehr ganz neu hier

Hallo
ich habe eine Tabelle mit den spalten
id
obj_id
field
fieldvalue

Nun würde ich gerne folgende Abfrage erstellen:
gib mir alle obj_ids für die es folgende einträge gibt:
field = "Zimmer" && fieldvalue = 4
field = "PLZ" && fieldvalue = 66666

ich stehe hier etwas auf dem Schlauch.
 

owieortho

Aktives Mitglied

SELECT `obj_id`
FROM `Deiner_Tabelle`
WHERE
(`field` = 'Zimmer' AND `fieldvalue` = 4) OR
(`field` = 'PLZ' AND `fieldvalue` = 66666)

Hilft's? Oder verstehe ich etwas falsch?
O.
 

buerzel

Versuch macht kluch!

Teammitglied
SELECT obj_id FROM Tabelle WHERE (field = "PLZ" AND fieldvalue = "66666") OR (field = "Zimmer" AND fieldvalue = "4")

Verstehe den Sinn der Abfrage (bzw. der Tabelle) zwar auch nicht, aber eigentlich dürfte fieldvalue kein numerisches Feld sein - oder wird damit gerechnet? :rolleyes:
 
Zuletzt bearbeitet:

AxelM

Nicht mehr ganz neu hier

Das hilft leider nicht weiter.
stellt euch vor, in der Datenbank werden daten zu immobilien abgespeichert.
obj_id = 3 => field = Zimmer => Fieldvalue = 3
obj_id = 3 => field = Miete => fieldvalue = 400

was ich hätte jetzt gern die 3, wenn ich sage : gib mir alle obj_ids mit 3 Zimmern und 400€ Miete.
 

buerzel

Versuch macht kluch!

Teammitglied
was ich hätte jetzt gern die 3, wenn ich sage : gib mir alle obj_ids mit 3 Zimmern und 400€ Miete.
Ja - dann hast du deine Tabelle völlig falsch aufgebaut. Man kann aus zwei Datensätzen keine Relation herstellen. Entweder enthält ein Datensatz die abgefragten Felder oder es muss anhand einer ID eine zweite Tabelle abgefragt werden.
 

buerzel

Versuch macht kluch!

Teammitglied
Es geht so nicht zu lösen - auch nicht mit PHP!

Beschäftige dich lieber mit den SQL- bzw. Datenbankgrundlagen ... :D
 

AxelM

Nicht mehr ganz neu hier

Doch mit PHP geht das schon zu lösen ;)

Finde alle ids wo field = Zimmer && fieldvalue = 3
foreach ids as id
prüfe ob es ein Ergebnis gibt für field= miete && fieldvalue = 400 && id = id
....

Aber effizient ist halt anders.
 

AxelM

Nicht mehr ganz neu hier

Tatsächlich stehe ich jetzt echt auf dem Schlauch...
was habe ich denn deiner Ansicht nach ursprünglich gefragt und was gibt der Programmablauf wieder?
 

owieortho

Aktives Mitglied

Mal unbesehen vom Rest der Datenbank, der vermutlich keine Überführung in eine Normalform (mindestens mal 1., 2. und 3.) widerfahren ist, sollte die Tabelle, die Du uns vorgegeben hast so aufgebaut sein:
obj_id | zimmer | miete
1 | 3 | 400

und damit ist Deine Abfrage lediglich SELECT `obj_id` FROM `Tabelle` WHERE `zimmer`=3 AND `miete`=400

Glaub mir, etwas in PHP zu erledigen, was Dir die (korrekt modellierte) Datenbank im Handumdrehen ausgibt, ist wie im zweiten Gang in den Urlaub zu fahren.

O.
 

buerzel

Versuch macht kluch!

Teammitglied
SELECT `obj_id` FROM `Tabelle` WHERE `zimmer`=3 AND `miete`=400
Hatte mir auch schon überlegt, dem TE eine korrekte Datenstruktur im Form einer Beispieltabelle an die Hand zu geben ...
Aber wie auch immer: Deine Abfragen mit Feldnamen in Accents „gerahmt” dürften auch wenig success generieren. :D
 

owieortho

Aktives Mitglied

Deine Abfragen mit Feldnamen in Accents „gerahmt” dürften auch wenig success generieren.
Magst Du mich aufklären, wieso dann bei meinen Anwendungsfällen, sowohl in Tools wie phpMyAdmin oder HeidiSQL als auch beim Übergeben der SQL-Statements in einem PHP-Skript, die backticks ja nicht fehlen dürfen?

Gruß in die alte Heimat (SO36)
O.
 

buerzel

Versuch macht kluch!

Teammitglied
@owieortho
Die Frage bezieht sich eindeutig auf MySQL und dem sind solcherlei „backticks” fremd. Selbst im Zusammenspiel mit PHP nicht gebräuchlich. Ansonsten verlink doch du mal Beispiele ...
 

AxelM

Nicht mehr ganz neu hier

Das hab ich schon verstanden... ;)
Nun ist die Datenbank aber halt nun mal bereits existent und nicht ganz klein.
Und ich hatte die Hoffnung mir den Aufwand sparen zu können, das umzudrehen.
 

webcasi

Nicht mehr ganz neu hier

Hallo,
ich denke Dir ist schon viel an die Hand gegeben worden, um diese Abfrage zu lösen.
Allerdings habe ich es so verstanden, dass völlig verschiedene Sachen in den Values der Felder stehen.
Vielleicht solltest Du die Datenbank erweitern und erst einmal dran arbeiten eine Normalform herzustellen.

Vielleicht solltest Du zu allererst eine Tabelle erstellen, die die verschiedenen Kategorien (Zimmer usw.)
Dann hast Du eine ID für die Kategorisierung, außerdem könnte man auch die anderen Werte in separate Tabellen verteilen, die dann jeweils auf ID´s referenzieren. Das macht das Ganze für die Zukunft einfacher und Du machst einen Schritt das Ganze ein wenig zu entwirren.

Ich habe mir jetzt mal eine Testtabelle geschaffen und denke wenn Du es in Mysql lösen willst, musst Du verschachtelte SQL´s bauen.
Hier sowas zum Beispiel :
Code:
select Kombi.ID, testtabelle.ID , testtabelle.fieldvalue, testtabelle.field from
(SELECT testtabelle.ID, testtabelle.field, testtabelle.fieldvalue
  FROM test.testtabelle testtabelle
WHERE (testtabelle.field = 'Zimmer') AND (testtabelle.fieldvalue = 3)
) Kombi, testtabelle where testtabelle.field = 'Miete' and testtabelle.fieldvalue = 400
 

webcasi

Nicht mehr ganz neu hier

Ist in diesem Thread keiner mehr aktiv? Oder konnten wir helfen?
Eine Rückmeldung wäre schon sehr nett. Foren sind auch dazu da.
 

Curanai

Aktives Mitglied

Backticks erhöhen die Performance des MySQL Interpreters (schnellere Identifikation, ob es Table-/Spaltennamen sind oder reservierte Wörter bzw. Funktionen, Trigger o. ä.). Wer aus seiner Applikation in puncto Speed wirklich das Letzte rauskitzeln will, kommt daran nicht vorbei.
 

owieortho

Aktives Mitglied

Backticks erhöhen die Performance des MySQL Interpreters (schnellere Identifikation, ob es Table-/Spaltennamen sind oder reservierte Wörter bzw. Funktionen, Trigger o. ä.). Wer aus seiner Applikation in puncto Speed wirklich das Letzte rauskitzeln will, kommt daran nicht vorbei.
Wieder was gelernt. Danke!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben