[GastForen Programmierung/Entwicklung PHP und MySQL db abfrage - brett vor dem kopf

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

db abfrage - brett vor dem kopf

jrandi
Beiträge gesamt: 794

6. Aug 2004, 00:12
Beitrag # 1 von 10
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo

Bitte wieder einmal um tipps und tricks . . .

DB Abfrage mit 2 Feldern die man mit "und" / "oder" aufrufen kann.

erste sql abfrage kein problem :
// si deuxieme champs vide
if ($recherche2==""){
$sql = "select * from ba_article WHERE article OR resume like '%$recherche%' AND etat_online='online'";
}


die zweite jedoch schon . . .
// si deuxieme champs N'EST PAS vide
if ($recherche2!=""){
$sql = "select * from ba_article WHERE article OR resume like '%$recherche%' AND etat_online='online' || like '%$recherche2%' AND etat_online='online'";
}

thx
jurg

(Dieser Beitrag wurde von jrandi am 6. Aug 2004, 00:14 geändert)
X

db abfrage - brett vor dem kopf

oesi50
  
Beiträge gesamt: 2315

6. Aug 2004, 08:45
Beitrag # 2 von 10
Beitrag ID: #101405
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hallo jrandi,

SELECT * FROM ba_article
WHERE article -- hier fehlt auch noch eine Vergleichsoperation
OR resume LIKE '%$recherche%'
AND etat_online='online'
OR resume LIKE '%$recherche2%'
AND etat_online='online'




Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#101384]
(Dieser Beitrag wurde von oesi50 am 6. Aug 2004, 09:28 geändert)

db abfrage - brett vor dem kopf

oesi50
  
Beiträge gesamt: 2315

6. Aug 2004, 09:31
Beitrag # 3 von 10
Beitrag ID: #101413
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich glaube, so ist's noch besser

SELECT * FROM ba_article
WHERE article -- hier fehlt auch noch eine Vergleichsoperation
AND etat_online='online' AND ( resume LIKE '%$recherche%' OR resume LIKE '%$recherche2%')

Was soll denn ... WHERE article ... bewirken?


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#101384]
(Dieser Beitrag wurde von oesi50 am 6. Aug 2004, 09:31 geändert)

db abfrage - brett vor dem kopf

jrandi
Beiträge gesamt: 794

6. Aug 2004, 13:21
Beitrag # 4 von 10
Beitrag ID: #101480
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

besten dank für deinen tipp !

Es geht um eine rudimentäre und wohl nicht gerade professionnelle interne suche für eine art ausstellung.

also 2 eingabefelder, welche mit AND oder OR abgeschickt werden, sollen suchen, ob der begriff im titel (article) oder im resume (kurzbeschreibung) gefunden wird. . . (erstellt dann eine liset mit allen gefundenen einträgen.

habe das jetzt mal so gemacht, scheint auf den ersten blick zu funktionieren . . .

if ($recherche2!=""){
$sql = "select * from ba_article WHERE article like '%$recherche%' AND etat_online='online' OR article like '%$recherche2%' AND etat_online='online' OR (resume LIKE '%$recherche%' AND etat_online='online' OR resume LIKE '%$recherche2%' AND etat_online='online')";
}

möchte das OR vor der Klammer mit $operation ersetzten, damit es entwerder OR oder eben AND sein kann. gleich mal ausprobieren ob das hinhaut, sollte eingentlich. . .oder.

thx und gruss
jurg


als Antwort auf: [#101384]

db abfrage - brett vor dem kopf

oesi50
  
Beiträge gesamt: 2315

6. Aug 2004, 14:28
Beitrag # 5 von 10
Beitrag ID: #101508
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
also ich würde das so machen:

...WHERE etat_online='online' AND(
(article LIKE '%$recherche%' OR article LIKE '%$recherche2%')
$deine_operation
(resume LIKE '%$recherche%'OR resume LIKE '%$recherche2%')
)

Das ist übersichtlicher und leichter zu handeln(scheiss denglisch).
Und immer daran denken, Punktrechnung(AND) geht vor Strichrechnung(OR).
Deshalb die Klammerung so wie sie ist, weil $deine_operation mal so und mal so sein kann.


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#101384]
(Dieser Beitrag wurde von oesi50 am 6. Aug 2004, 14:32 geändert)

db abfrage - brett vor dem kopf

jrandi
Beiträge gesamt: 794

6. Aug 2004, 15:56
Beitrag # 6 von 10
Beitrag ID: #101529
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
besten dank ! sieht wirklich viel besser aus.

nur, ich checks offensichtlich immer noch nicht . . .

bei recherche OR recherche2
scheint es zu klappen, aber bei
recherche AND recherche2
geht's nicht. er gibt mir zwar weniger einträge zurück aber es sind nicht zwingend beide suchbegriffe zu finden. . . unglaublich, wieviel zeit ich für diese kleine function schon brauche...

für die bessere übersicht habe ich den ganzen code farbig auf meiner site plaziert - in der hoffnung, dass man mir mein Brett vor dem Kopf nimmt ;-(

http://www.randj.net/tests/

gruss
jurg


als Antwort auf: [#101384]

db abfrage - brett vor dem kopf

oesi50
  
Beiträge gesamt: 2315

6. Aug 2004, 16:24
Beitrag # 7 von 10
Beitrag ID: #101533
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
jetzt haben wir folgendes:

- online muss immer sein
- zusätzlich
- recherche in article oder recherche2 in article
- und /oder($operation)
- recherche in resume oder recherche2 in resume

Ist es überhaupt das was Du willst?

Beschreibe doch mal mit eigenen Worten, wie gesucht werden soll(ohne an sql zu denken).

Möglicherweise so:

- online muss immer sein
- zusätzlich
- recherche in article $operation recherche2 in article
- oder
- recherche in resume $operation recherche2 in resume


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#101384]
(Dieser Beitrag wurde von oesi50 am 6. Aug 2004, 16:27 geändert)

db abfrage - brett vor dem kopf

jrandi
Beiträge gesamt: 794

6. Aug 2004, 17:48
Beitrag # 8 von 10
Beitrag ID: #101546
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
tja, du siehst das richtig, weiss nicht was ich da noch zusätzlich rausbringe :

- article muss zwingend im Online-Zustand sein (also nicht offline)
- recherche muss in titel (also article) und resume (kurzbeschrieb) suchen
- recherche und recherche2, sofern nicht leer, ergibt 2 möglichkeiten :
der suchbegriff recherche oder (OR) recherche2 muss entweder im Titel oder Resumé gefunden werden.
der suchbegriff recherche und (AND) recherche2 müssen gefunden werden, entweder im Titel oder im Resumé.

die variablen recheche, recherche2 und operation werden korrekt übergeben. Den Code den Du gepostet hat halte ich für richtig, wüsste nicht wie man es besser machen könnte. aber wie gesagt, die AND-abfrage gibt "falsche" einträge zurück : einträge mit nur einem abgefragt kriterium . . .

der fehler liegt ja wohl auch nicht in der zeile 169. . . ich seh nicht durch . . .

gruss
jurg


als Antwort auf: [#101384]

db abfrage - brett vor dem kopf

oesi50
  
Beiträge gesamt: 2315

6. Aug 2004, 18:14
Beitrag # 9 von 10
Beitrag ID: #101548
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
erst mal stellst Du alle Abfragen so um:

...WHERE etat_online = 'online' AND (

)

Jetzt brauchen wir uns nur noch Gedanken über den Inhalt der Klammern machen.

Und dann wird's wohl so sein:

(article LIKE recherche $op resume LIKE recherche2)
OR
(article LIKE recherche2 $op resume LIKE recherche)





Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)


als Antwort auf: [#101384]

db abfrage - brett vor dem kopf

jrandi
Beiträge gesamt: 794

6. Aug 2004, 19:01
Beitrag # 10 von 10
Beitrag ID: #101556
Bewertung:
(2056 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
thx für den tipp. hab's zwar etwas anders gemacht, aber dein imput hat mir auf die sprünge geholfen :

$sql = "select * from ba_article WHERE etat_online='online' AND
((article LIKE '%$recherche%' OR resume LIKE '%$recherche%') $operation
(article LIKE '%$recherche2%' OR resume LIKE '%$recherche2%'))";

mal intensiv testen, ob es wirklich das ist. ansonsten werde ich mal deine kombination ausprobieren. aber jetzt attackieren wir mal ein paar weiter probleme meines projets - da gibt's noch einiges zu regeln. . . hoffe muss mich nicht bald wieder melden ;-)

besten dank und gruss
jurg


als Antwort auf: [#101384]
X