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
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
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 
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
hehe