GET Parameter Sortieren und in DB-Abfrage verwerten

Hallo

Oh sorry, die Spalte gibt`s auch, allerdings ebenfalls als ID für eine weitere Tabelle. Weil ich die noch nicht genutzt habe, hatte ich sie vergessen.

objekt:
+----+------------+----------------+----------------+
| id | objectid | objektvalue | valueid |
+----+------------+----------------+----------------+
| 1 | -----x1-----| ------1-------- | ------1-------- |
| 2 | -----x2-----| ------2-------- | ------2-------- |
| 3 |----- x3------|------3-------- | ------3-------- |
+----+------------+----------------+----------------+

Grüße & Danke

Michael Meyer
 
Also, du willst ein Query in dieser Art
SQL:
SELECT 
	o.objectid
FROM
	(SELECT DISTINCT objectid FROM objekt) AS o
	INNER JOIN (
		SELECT 	*
		FROM 	objekt
		WHERE	valueid = 'c222f644e1' AND FIND_IN_SET(objectvalue, 'rot,grün')
	) AS s1	ON o.objectid = s1.objectid	
	INNER JOIN (
		SELECT	*
		FROM 	objekt
		WHERE 	valueid = 'aab1039266' AND FIND_IN_SET(objectvalue, '10,50')
	) AS s2 ON o.objectid = s2.objectid
	INNER JOIN (	
		SELECT	*
		FROM 	objekt
		WHERE 	valueid = 'dba6f39948' AND FIND_IN_SET(objectvalue, 'mit Deckel')
	) AS s3 ON o.objectid = s3.objectid
Wobei der folgende Teil je nachdem zusammengestellt werden muss
SQL:
	INNER JOIN (
		SELECT 	*
		FROM 	objekt
		WHERE	valueid = 'XXXX' AND FIND_IN_SET(objectvalue, 'XXX,XXX,XXX')
	) AS sX	ON o.objectid = sX.objectid

Das ergibt dann in etwa so etwas
PHP:
//Als $_GET-Parameter habe ich für den key die $valueid genommen.
$gets = Array(
            'c222f644e1' => Array(
                    0 => 'rot',
                    1 => 'gelb',
                    2 => 'grün'
            ),
            
            'aab1039266' => Array(
                    0 => 10,
                    1 => 20,
                    2 => 30
            ),
            
            'dba6f39948' => Array(
                    0 => 'mit Deckel',
                    1 => 'ohne Deckel'
            )
        );
        

//alle gets durchgehen pro durchgang einen inner Join zusammenstellen
/**
 *  INNER JOIN (
        SELECT  *
        FROM    objekt
        WHERE   valueid = 'XXXX' AND FIND_IN_SET(objectvalue, 'XXX,XXX,XXX')
    ) AS sX ON o.objectid = sX.objectid 
 */
foreach($gets as $valueid => $values){
    $objectvalues = implode(',', $values);
    $count++;
    $froms[] = "
                INNER JOIN (
                        SELECT  *
                        FROM    objekt
                        WHERE   valueid = '{$valueid}' AND FIND_IN_SET(objectvalue, '{$objectvalues}')
                    ) AS s{$count} ON o.objectid = s{$count}.objectid 
                ";        
}

$from = implode('', $froms);
$sql = "
        SELECT 
            o.objectid
        FROM
            (SELECT DISTINCT objectid FROM objekt) AS o
            {$from}";

echo $sql;
 
Zuletzt bearbeitet von einem Moderator:
So, nach langem Kampf habe ich das auch hinbekommen. Vielen Dank dafür.

Ich rufe die Daten ja per GET und da wird mir eigentlich nur der Name des Selectfeldes als $valueid übertragen, die in folgender Schleife abgerufen wird:

foreach($gets as $valueid => $values){

Ich habe es jetzt erst einmal so gemacht, dass ich die valueid von objekt als Selectfeldname verwende.

Wie müßte ich verfahren, wenn ich statt der valueid von objekt nur OPTNAME aus der Tabelle VALUES habe.

Das wäre meine allerletzte Frage für heute

Danke im Voraus.

Grüße

Michael Meyer
 
Zuletzt bearbeitet:
Hallo,

ich hoffe, das klappt mit dem Thread: Ich habe in obiger DB nun eine 4. Tabelle eingefügt. Es ist jeweils die CATID bekannt und es sollen nur die Artikel mit dieser CATID erscheinen.

Tabelle Kategorien
ID PRODUCTID CATID
abc674 5b55f12ea7b 38461cf98
cde456 82ee1f9315df 48464dw85

Weiss jemand Rat?

Vielen Dank

Michael Meyer
 
Zurück