![]() |
[SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginnt
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 ![]() 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 :roll:). Bei Buchstaben mache ich das so:
SQL-Code:
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.
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 Ich habe jetzt mit der PHP-Funktion in_array() jeden Buchstaben vor der Ausgabe überprüft:
Code:
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.
[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]; } } 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 |
Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn
Hallo Faux,
ich weiß ja nicht wie teuer deine Abfrage ist, aber den relevanten set of characters könntest du auch per SQL bestimmen:
SQL-Code:
Grüße vom marabu
SELECT DISTINCT UPPER(SUBSTRING(serie, 1, 1)) FROM ...
|
Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn
Also ich habe jetzt pro Link ein Query gemacht, was sicherlich nicht zu empfehlen ist.
Buchstaben:
SQL-Code:
Zahlen:
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
SQL-Code:
Sonderzeichen:
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 '0' AND '9' LIMIT 1
SQL-Code:
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.
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 '0' AND '9' AND LOWER(SUBSTRING(serie,1,1)) NOT BETWEEN 'a' AND 'z' LIMIT 1 Fällt jemanden eine Lösung ein, die das ganze auf ein bzw. zwei Querys veringert? Grüße Faux |
Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn
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. |
Re: [SQL/PHP] Herausfinden ob Suchergebnis mit Ziffer beginn
Wenn ich gewusst hätte, dass es in MySQL CASE, IF und sogar Schleifen gibt, wäre mir schon einige male geholfen gewesen.. :wall:
Danke! Ich habs so gelöst:
SQL-Code:
btw: Formatiert man das CASE in SQL so?
SELECT
CASE WHEN LOWER(SUBSTRING(serie,1,1)) BETWEEN 'a' AND 'z' THEN 'alpha' WHEN SUBSTRING(serie,1,1) BETWEEN '0' AND '9' THEN '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 Danke nochmals! Grüße Faux |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz