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 12-02-2015, 00:35
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard Benötige Hilfe bei komplexer SQL Abfrage für Filter

Hallo,

ich habe ein Formular, über das ich zuvor zugeordnete Einträge aus der Datenbank gefiltert ausgeben möchte.

Das Formular hat folgenden Aufbau.
---------------------------
1. Frau oder Mann?
---------------------------
2. Alter wie z.b. 10, 20, 30, 40, 50
---------------------------
3. Viele verschiedene Vorlieben wie Essen, Trinken, Feiern, Reisen, Sport
---------------------------
4. Beziehung: Freunde, Familie, Bekannte
---------------------------

Das Formular besteht aus checkboxen, von denen ich beliebig viele Auswählen kann und in beliebiger Reihenfolge.

Ich habe in der Datenbank Produkte hinterlegt, die in einer Tabelle den jeweiligen Kategorien zugeordnet sind.

Ein Produkt ist z.B. nur für Männer, 20 Jahre, Hat etwas mit Sport und Reisen zu tun und nur für Freunde.

Wenn ich aber jetzt z.B. "Männer" und 10 jahre wähle, bekomme ich das gleiche Produkt angezeigt, da es auch für die Kategorie 1 "Männer" zugeordnet wurde obwohl es vom alter nicht mehr passt.

Wie löse ich das Problem, das die einzelnen Gruppen und die abhängigkeit der Kategorien berücksichtigt werden?

Mein Ansatz ist so, ich bekomme aber immer 0 zeilen Raus obwohl es ein Produkt gibt das passen muss.

PHP-Code:
SELECT products.* FROM products 
JOIN product_in_kategorie ON products
.id product_in_kategorie.product_id
JOIN kategorien ON product_in_kategorie
.kategorie_id kategorien.id
WHERE 
(product_in_kategorie.kategorie_id IN (152334) AND kategorien.gruppe 1) AND 
(
product_in_kategorie.kategorie_id IN (152334)  AND kategorien.gruppe 2
 AND 
(
product_in_kategorie.kategorie_id IN (152334)  AND kategorien.gruppe 3)
 AND 
(
product_in_kategorie.kategorie_id IN (152334)  AND kategorien.gruppe 4)  LIMIT 20 
Also ich will das die Abfrag folgendes kann z.B.

Ich suche was für Frauen, im alter von 20 oder 30 Jahre, mit den Interessen Essen oder Feiern oder Reisen und Die Beziehung ist Freunschaft oder Familie.
Dann sollen nur die Produkte ausgegeben werden, die genau zu diesen Kriterien passen und absolut nichts was nur für Männer zugeordnet wurde aber von alter her passt.

Meine Überlegung war, das ganze in mehrere Abfragen zu teilen, so dass ich erst abfrage, ist es was für Männer oder Frauen oder ist es egal.. Danach den Rest usw..
Das Problem bei dieser Vorgehensweise ist, das ich mit LIMIT 20 arbeite und eventuell gar nicht bis zu 3. oder 4. Abfrage komme, obwohl es noch genug ungeprüfte Einträge gäbe die wegen dem LIMIT nicht berücksichigt werden.
Deswegen müsste alles in einer Abfrage gemacht werden.

Geändert von BananaJo (12-02-2015 um 00:51 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 12-02-2015, 01:13
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
WHERE 
(product_in_kategorie.kategorie_id IN (152334) AND kategorien.gruppe 1) AND 
(
product_in_kategorie.kategorie_id IN (152334)  AND kategorien.gruppe 2
 AND [...] 
Das funktioniert so selbstverständlich nicht, weil du hier verlangst, dass kategorien.gruppe gleichzeitig den Wert 1 und den Wert 2 haben soll – und solange du keinen Quantencomputer hast, wird das wohl kaum der Fall sein.

Bevor wir das weiter diskutieren, beschreibst du aber bitte erst mal dein Datenmodell/Tabellenstrukturen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 12-02-2015, 09:51
Benutzerbild von BananaJo BananaJo
 Registrierter Benutzer
Links : Onlinestatus : BananaJo ist offline
Registriert seit: Aug 2008
Beiträge: 344
BananaJo kann nur auf Besserung hoffen
Standard

Tabelle 1 - products: Eine Tabelle mit allen Produkten.
Tabelle 2 - kategorien: Kategorien mit Ids und Gruppen Nummern 1 - 4
Tabelle 3 - product_in_kategorie: Je Produkt ein mehrere Datensätze, je nachdem in welcher Kateogire
Mit Zitat antworten
  #4 (permalink)  
Alt 12-02-2015, 12:10
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Sowas kann man mit HAVING umsetzen.

Zuerst mal filterst du nach allen Datensätzen, die in einer der gesuchten Kategorien sind (also mit OR verknüpft, nicht mit dem – unmöglich erfüllbaren – AND), gruppierst diese nach dem Produkt – und verlangst dann mit HAVING, dass die Anzahl der gefundenen Datensätze je Produkt genau oder mindestens (= oder <, je nachdem, ob du nur Produkte haben haben willst, die ausschließlich in den gesuchten Kategorien sind, oder ob sie auch noch in anderen sein dürfen) der Anzahl deiner Suchbedingungen (vorher ermittelt, und als statischer Wert in die Query eingesetzt) entspricht.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
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
Brauche Hilfe bei SQL Abfrage sveny25 SQL / Datenbanken 2 01-06-2008 16:51
[SQL allgemein] Hilfe bei einer Abfrage dj-giver SQL / Datenbanken 1 24-09-2007 15:47
[SQL allgemein] Benötige Hilfe bei Aufgaben antman Projekthilfe 8 07-01-2006 10:27
Benötige Hilfe bei IF Abfrage FRAD PHP Developer Forum 13 10-02-2005 18:23
Benötige Hilfe bei Abfrage em-!x SQL / Datenbanken 5 06-07-2004 13:52

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 22:01 Uhr.