AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginnt
Thema durchsuchen
Ansicht
Themen-Optionen

[SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginnt

Ein Thema von faux · begonnen am 15. Apr 2006 · letzter Beitrag vom 18. Apr 2006
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

[SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginnt

  Alt 15. Apr 2006, 16:46
Hallo!

Ich habe ein Skript programmiert, das Daten aus einer Datenbank ausliest und diese dann ausgibt.
Man hat mehrere Suchkriterien nach denen man suchen kann.
Wie bereits in diesem Thread erwähnt habe ich eine Filterleiste gemacht, mit denen man die Ergebnisse nach Anfangsbuchstaben filtern kann.
Das ganze funktioniert auch schon sehr gut, nur will der Inhaber der Seite jetzt auch noch, dass nur die Buchstaben angezeigt werden, die auch ein Ergebnis liefern (immer diese Extrawünsche ).
Bei Buchstaben mache ich das so:
SQL-Code:
SELECT SUBSTRING(serie,1,1) AS used
FROM page_series AS s, page_types AS t, page_publishers AS p
WHERE s.type = t.id
  AND p.id = s.publisher
  AND serie LIKE '%cat%
GROUP BY used
ORDER BY used ASC
In diesem Fall hat jemand nach cat im Feld serie gesucht. Jetzt bekomme ich als Resultat dieses Querys 'B', 'C' und '.', weil sowohl Einträge mit B, C wie auch mit einem Punkt beginnend verfügbar sind.
Ich habe jetzt mit der PHP-Funktion in_array() jeden Buchstaben vor der Ausgabe überprüft:
Code:
[color=#800080]for[/color] ([color=#000080][i]$i[/i][/color] = [color=red]65[/color]; [color=#000080][i]$i[/i][/color] <= [color=red]90[/color]; [color=#000080][i]$i[/i][/color]++)
{
  [color=#000080][i]$a[/i][/color] = chr([color=#000080][i]$i[/i][/color]);
  [color=#FF8000]// Print only chars which have a result.[/color]
  [color=#800080]if[/color] (in_array([color=#000080][i]$a[/i][/color], [color=#000080][i]$need[/i][/color]))
  {
    [color=#000080][i]$charlist[/i][/color] .= [color=#008000]"<a href=\"[/color][color=#000080][i]$_SERVER[/i][/color][color=#008000][PHP_SELF]?char=[/color][color=#000080][i]$a[/i][/color][color=#000080][i]$VARS[/i][/color][color=#008000][view][/color][color=#000080][i]$VARS[/i][/color][color=#008000][find]\">[/color][color=#000080][i]$a[/i][/color][color=#008000]</a> | "[/color];
  }
}
Das funktioniert auch alles ganz gut, nur will ich nicht für 0, 1, 2, .. 9 einen extra Link machen, da das überflüssig wäre. Ich will das ganze mit einem Link '0-9' erledigen, der alle Nummern anzeigt und einen Link mit etc. der alle Sonderzeichen ausgibt.
Soweit funktioniert nochimmer alles, bis auf die Tatsache, das mir kein vernünftiger Weg einfällt, wie ich überprüfe ob die Links 0-9 bzw etc. überhaupt benötigt werden, also angezeigt werden sollen.
Desweiteren wollte ich noch fragen, ob das Suchen des Buchstabens mit der Funktion in_array() sinnvoll ist oder ob das Resourcenverschwendung ist und jemandem etwas besseres einfällt. Gibts überhaupt allgemein eine Bessere Lösung?

Wäre über jeden Tipp froh.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn

  Alt 15. Apr 2006, 19:42
Hallo Faux,

ich weiß ja nicht wie teuer deine Abfrage ist, aber den relevanten set of characters könntest du auch per SQL bestimmen:

SELECT DISTINCT UPPER(SUBSTRING(serie, 1, 1)) FROM ... Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn

  Alt 18. Apr 2006, 15:35
Also ich habe jetzt pro Link ein Query gemacht, was sicherlich nicht zu empfehlen ist.

Buchstaben:
SQL-Code:
SELECT SUBSTRING(serie,1,1) AS chars
FROM page_series AS s, page_types AS t, page_publishers AS p
WHERE s.type = t.id
  AND p.id = s.publisher
  AND serie LIKE '%cat%'
GROUP BY SUBSTRING(serie,1,1)
ORDER BY SUBSTRING(serie,1,1) ASC
Zahlen:
SQL-Code:
SELECT SUBSTRING(serie,1,1) AS chars
FROM page_series AS s, page_types AS t, page_publishers as p
WHERE s.type = t.id
  AND p.id = s.publisher
  AND serie LIKE '%cat%
  AND SUBSTRING(serie,1,1) BETWEEN '0AND '9'
LIMIT 1
Sonderzeichen:
SQL-Code:
SELECT SUBSTRING(serie,1,1) AS chars
ROM page_series AS s, page_types AS t, page_publishers as p
WHERE s.type = t.id
  AND p.id = s.publisher
  AND serie LIKE '%cat%'
  AND SUBSTRING(serie,1,1) NOT BETWEEN '0AND '9'
  AND LOWER(SUBSTRING(serie,1,1)) NOT BETWEEN 'aAND 'z'
LIMIT 1
Und jetzt überprüfe ich pro Query, ob ein Result zurück kommt. Beim 1. mache ich pro Result einen Link (A-Z) und bei den Resultichen mache ich, wenn es ein Result gibt, einen 0-9 Link und beim 2. einen etc. Link.
Fällt jemanden eine Lösung ein, die das ganze auf ein bzw. zwei Querys veringert?

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
annonyme

Registriert seit: 1. Sep 2004
Ort: Lübeck
35 Beiträge
 
#4

Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn

  Alt 18. Apr 2006, 16:13
case UPPER(SUBSTRING(serie,1,1))
when 'A' then 'A'
when 'B' then 'B'
.....
when '1' then '0-9'
.....
else 'sonderzeichen'
end AS chars



ist zwar nicht schön, würde aber auch gehen.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn

  Alt 18. Apr 2006, 17:26
Wenn ich gewusst hätte, dass es in MySQL CASE, IF und sogar Schleifen gibt, wäre mir schon einige male geholfen gewesen..
Danke!

Ich habs so gelöst:
SQL-Code:
SELECT
  CASE
    WHEN LOWER(SUBSTRING(serie,1,1)) BETWEEN 'aAND 'zTHEN 'alpha'
    WHEN SUBSTRING(serie,1,1) BETWEEN '0AND '9THEN 'numeric'
    ELSE 'symbol'
  END AS chars
FROM page_series AS s, page_types AS t, page_publishers AS p
WHERE s.type = t.id
  AND p.id = s.publisher
  AND serie LIKE '%cat%'
GROUP BY chars
ORDER BY chars ASC
btw: Formatiert man das CASE in SQL so?

Danke nochmals!

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz