MySQL Select bei z.T. ausgefüllten Suchformular

Geehrtes WWW Forum,

ich habe gerade ein kleines Problem mit einer Select Abfrage. Es geht (beispielhaft) um folgende Tabelle:

produkt
id | produktname | produkthersteller | typ | gewicht
1 | Mattscheibe | Pranasonic | 1 | 9
2 | Dauerwelle | Gelbpunkt | 2 | 1.2
3 | Flimmerkiste | Pranasonic | 1 | 5

Dazu habe ich ein kleines Suchformular erstellt:

Produktname:
Produkthersteller:
Typ:
TVRadio
Max. Gewicht: kg

Mein Problem ist nun, dass mein Suchformular auch Ergebnisse liefern soll, wenn einzelne Formularfelder nicht ausgefüllt werden. Folgende Select Abfrage funktioniert leider noch nicht wie sie sollte. Ein Ergebnis bekomme ich nur, wenn alle Formularfelder ausgefüllt wurden (und der Datensatz vorhanden ist):

$query = "select * from produkt
where produktname like ‚%$produktname%‘
and produkthersteller like ‚%$produktherstller%‘
and typ = ‚$typ‘
and gewicht

Weiß jemand Abhilfe?

Schöne Grüße, Q_5

$query = "select * from produkt
where ( produktname like ‚%$produktname%‘ or ‚‘ = ‚$produktname‘)
and ( produkthersteller like ‚%$produktherstller%‘ or ‚‘ = ‚$produktherstller‘)
and typ = ‚$typ‘
and gewicht

Weiß jemand Abhilfe?

nur ein versuch

where ( produktname like ‚%$produktname%‘ or ‚‘ = ‚$produktname‘)
and ( produkthersteller like ‚%$produktherstller%‘ or ‚‘ = ‚$produktherstller‘)
and ( typ = ‚$typ‘ or ‚‘ = ‚$typ‘ )
and ( gewicht

Den Syntax verstehe ich zwar nicht ganz, aber es funktioniert tatsächlich :smiley: Ich habe zuvor selbst mit „or“ experimentiert, bin aber gescheitert. Bei „like“ und „%“ ist übrigens kein „or“ notwendig:

$query = "select \* from produkt
 where produktname like '%$produktname%'
 and produkthersteller like '%$produktherstller%'
 and ( typ = '$typ' or '' = '$typ' )
 and ( gewicht 

Ein großes Danke!

Den Syntax verstehe ich zwar nicht ganz, aber es funktioniert
tatsächlich :smiley: Ich habe zuvor selbst mit „or“ experimentiert,
bin aber gescheitert. Bei „like“ und „%“ ist übrigens kein
„or“ notwendig:

das mir wirklich nicht egal , ich schreibe es logisch hin, das der einzelfall ‚%%‘ immer zutrifft ist für mich eher zufall . Die Formel lautet aber or ‚‘=’$parameter’ . Zuviel kann ich garnicht schreiben wenns um logik geht , schon beim späteren optimieren ist es eindeutiger.

das mir wirklich nicht egal , ich schreibe es logisch hin, das
der einzelfall ‚%%‘ immer zutrifft ist für mich eher zufall .
Die Formel lautet aber or ‚‘=’$parameter’ . Zuviel kann ich
garnicht schreiben wenns um logik geht , schon beim späteren
optimieren ist es eindeutiger.

übrigens ist der Vorteil bei NULL werten zu sehen . habe ich ein NULL wert bin ich mir nicht sicher ob LIKE ‚%%‘ noch ein WAHR erzeugt. sicher ist aber das die eingabe = ‚‘ immer wahr ist auch bei NULL feldern.

Beiweis :
tabelle
idx int(11)
name varchar(255)
items varchar(255) NULL

eintrag
idx name items
1 test1 test1
2 test2 NULL

SELECT * FROM test where name like ‚test%‘
idx name items
1 test1 test1
2 test2 NULL

SELECT * FROM test where (name like ‚test%‘ or ‚‘ = ‚‘)
idx name items
1 test1 test1
2 test2 NULL

SELECT * FROM test where name like ‚test%‘ and items like ‚%%‘
idx name items
1 test1 test1

deutlich oder :smile:

Ich hab’s gerade ausprobiert und verstehe jetzt was du meinst. Hier mein Versuch:

create database test_db;

use test_db;

create table test_tbl
(
spalte_1 varchar(10),
spalte_2 varchar(10)
) engine = InnoDB;

insert into test_tbl values
(‚Barbara‘, ‚Caroline‘),
(‚Anna‘, NULL);

select * from test_tbl
where spalte_1 like ‚%%‘;

±---------±---------+
| spalte_1 | spalte_2 |
±---------±---------+
| Barbara | Caroline |
| Anna | NULL |
±---------±---------+

select * from test_tbl
where spalte_2 like ‚%%‘;

±---------±---------+
| spalte_1 | spalte_2 |
±---------±---------+
| Barbara | Caroline |
±---------±---------+

select * from test_tbl
where (spalte_2 like ‚%%‘ or ‚‘ = ‚‘);

±---------±---------+
| spalte_1 | spalte_2 |
±---------±---------+
| Barbara | Caroline |
| Anna | NULL |
±---------±---------+

gut , mein 2 query hat nen fehler gehabt , copy paste problem :smile: hehe