php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.01.2006, 17:06  
Gast
 
Beiträge: n/a
Standard [Erledigt] suche Lösung für logisches Problem bei Datenbankabfrage

Ich habe einen MYSQL Table die Strukturell etwa wie folgt aussieht:
ID - MERKMAL
1 - 1
1 - 2
2 - 1
3 - 2
3 - 3
Ich möchte nun alle IDs ermitteln die gewisse Merkmale besitzen.
Also z.B. alle Ids die Merkmal 1 und Merkmal 2 haben.
Im Beispiel wär dies nur die ID 1.
Klingt eigentlich ganz einfach, ist es aber nicht (für mich ). Jedenfalls komm ich zu keiner brauchbaren Lösung.
"SELECT * FROM table WHERE merkmal = 1 OR merkmal = 2" ist nicht die gewünschte Lösung, weil ich ja auch diejenigen IDs erhalte, die nur eins der Merkmale aufweisen. AND statt OR funktioniert auch net. Hab auch schon mit GROUP BY und HAVING rumgespielt, was mich aber auch net weiter gebracht hat.
Ich hoffe irgendwer hat eine Idee. Eigentlich bin ich ja der Meinung das die Lösung einfach sein sollte, nur gefunden hab ich sie noch nicht .
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.01.2006, 18:18  
Gast
 
Beiträge: n/a
Standard

Interessant, dass bei dir die IDs ab und zu gleich sind
IDs sind dazu gedacht eben NICHT gleich zu sein.
  Mit Zitat antworten
Alt 24.01.2006, 19:33  
Gast
 
Beiträge: n/a
Standard

Ja super des hilft mir aber auch net weiter.

Was spricht dagegen das die ID gleiche Werte aufweist?
ID ist in diesem Fall kein autoincrement und auch kein Primärschlüssel.
Die Datenbank sieht auch noch ein wenig anders aus, ich hab das nur mal abstrahiert um das Problem zu beschreiben.
  Mit Zitat antworten
Alt 24.01.2006, 20:14  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard Re: suche Lösung für logisches Problem bei Datenbankabfrage

Zitat:
Zitat von mog
AND statt OR funktioniert auch net.
Sollte es aber. Wie hast du es denn mit AND versucht?
xabbuh ist offline   Mit Zitat antworten
Alt 25.01.2006, 11:31  
Gast
 
Beiträge: n/a
Standard

Naja statt OR halt AND.
"SELECT * FROM table WHERE merkmal = 1 AND merkmal = 2"
Das gibt dann kein Ergebniss weil ja wahrscheinlich in einer Datenbankzeile nach beiden Werten gesucht wird.
  Mit Zitat antworten
Alt 25.01.2006, 11:31  
Neuer Benutzer
 
Registriert seit: 06.10.2005
Beiträge: 25
Tentacle
Tentacle eine Nachricht über ICQ schicken
Standard

Ohne JOINs wird das nix.

Code:
  SELECT andere_Tabelle.id
    FROM andere_Tabelle
    JOIN diese_Tabelle as a
      ON a.id = andere_Tabelle.id AND
         a.merkmal = 1
    JOIN diese_Tabelle as b
      ON b.id = andere_Tabelle.id AND
         b.merkmal = 2
GROUP BY andere_Tabelle.id
Da die IDs bei Dir ja mehrfach auftauchen, gehe ich davon aus, dass es hier nur Fremdschlüssel sind und Du noch eine andere Tabelle hast, in welcher diesen IDs ein eindeutiger Eintrag zugeordnet ist.

Hab jetzt nicht ausprobiert, dürfte aber Dein Problem lösen.
Tentacle ist offline   Mit Zitat antworten
Alt 25.01.2006, 11:38  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard Re: suche Lösung für logisches Problem bei Datenbankabfrage

Zitat:
Zitat von xabbuh
Zitat:
Zitat von mog
AND statt OR funktioniert auch net.
Sollte es aber. Wie hast du es denn mit AND versucht?
Kann es nicht, da er ja die Daten auf verschiedenen Zeilen hat.
Eine Möglichkeit wäre ein Self-Join.
Code:
SELECT a.id FROM tabelle a
INNER JOIN tabelle b ON a.id = b.id
WHERE a.merkmal = 1 AND b.merkmal = 2;
Funktioniert, ist aber nicht gerade flexibel.
__________________
Gruss
L
lazydog ist offline   Mit Zitat antworten
Alt 25.01.2006, 11:46  
Gast
 
Beiträge: n/a
Standard

Hi mog,

geprüft und getestet:

PHP-Code:
<?php
SELECT t1
.IDCOUNT(t1.MERKMAL) AS anzahlMerkmale

FROM 
(
  
SELECT DISTINCT FROM table
  
) as t1
WHERE 

t1
.MERKMAL OR t1.MERKMAL 2

GROUP BY t1
.ID having anzahlMerkmale 2
?>
Erklärung:
erstmal schmeißen wir in der inneren Abfrage die doppelten raus(falls es mehrere Spalten gibt, mit gleicher ID und MERKMAL).
Danach zählen wir einfach wie oft eine ID mit in der WHERE-Bedingung bestimmten Eigenschaften gefunden wurde und nehmen nur die, die so oft gefunden wurden, wie nach MERKMALEN gesucht wird.

Gruß Ghost
  Mit Zitat antworten
Alt 25.01.2006, 12:22  
Gast
 
Beiträge: n/a
Standard

Danke erstmal für die Antworten.
Ein Join mit einer anderen Tabelle bringt in diesem Fall ja nichts, da alle Informationen die ich benötige, in dem einen Table vorhanden sind.
Das man eine Tabelle mit sich selbst joinen kann wusste ich noch garnicht. Ist eine nette Idee nur funktioniert das bei mir nicht so wirklich.

Also die Idee von Ghost funktioniert super.
Die Idee einfach mit count() zu zählen ist eine Lösung für des Problem, wobei sie mir nicht wirklich gefällt. Ich hab das noch ein wenig umgeschrieben weil 2 SELECTS nicht unbedingt nötig sind.
SELECT hotel_id
FROM tabelle
WHERE merkmal = 1 OR merkmal = 2
GROUP BY hotel_id
HAVING count(hotel_id) = 2

Ich hätte irgendwie gedacht das es für das (eigentlich einfache) Problem eine einfachere(schönere ) Lösung gibt.
  Mit Zitat antworten
Alt 25.01.2006, 13:18  
Gast
 
Beiträge: n/a
Standard

Hi mog,

die 2. SELECT-Anweisung wird dann gebraucht, falls der Primärschlüssel nicht über die 2 Spalten erstellt wurde (also die Kombination ID/MERKMAL nicht eindeutig ist). Dann könnte es theoretisch vorkommen, daß der Datensatz ID = 1 / MERKMAL = 2 mehrfach vorkommt. In meiner Lösung wird dieser Fall berücksichtigt.

Gruß Ghost
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ich suche Hilfe bei einem Problem mit Navicat Chris1234 PHP Tipps 2008 1 09.02.2008 09:41
Problem bei Datenbankabfrage PHP Tipps 2006 3 19.03.2006 18:48
problem bei distinct datenbankabfrage... Promaetheus Datenbanken 2 25.01.2006 17:28
[Erledigt] Problem mit komplexer Datenbankabfrage Datenbanken 3 23.12.2005 22:02
[Erledigt] Problem mit Datenbankabfrage Datenbanken 3 09.12.2005 20:03
[Erledigt] Erweiterung der Suche PHP Tipps 2007 2 01.12.2005 19:30
Problem bei Datenbankabfrage PHP Tipps 2005-2 10 17.10.2005 14:55
Problem bei txt suche Marian PHP Tipps 2005-2 8 14.10.2005 23:23
mal wieder eine suche lomtas Datenbanken 0 12.07.2005 11:03
[Erledigt] 1 suche und 1 problem HTML, Usability und Barrierefreiheit 1 09.02.2005 14:35
suche bestimmte Datenbankabfrage mit SUM() Datenbanken 4 21.01.2005 13:40
Problem Suche Array das nur den text in Variable ließt ... PHP Tipps 2005 2 09.01.2005 11:58
dropdown/checkboxe - problem ohne lösung trotz suche anakadai PHP Tipps 2004 2 04.11.2004 01:17
Problem mit einer Datenbankabfrage Borlox PHP Tipps 2004 3 19.09.2004 20:23
Problem bei Datenbankabfrage und Anzeige PHP Tipps 2004 3 07.07.2004 12:02

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
www.idmerkmal.de, logisches problemlösen, datenbankabfrage gleiche inhalte, datenbank abfrage, logisches problem, wie erstelle ich ein neues merkmal bei einer datenbankabfrage, id merkmal, problem lösen self join, datenbankabfrage where a*, datenbankabfrage welches merkmal hat zwei verschiedene merkmale, gleiche spaltennamen in datenbankabfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.