searchGeraete($search_term, 20); if ($show_shop_items) { foreach ($results as &$device) { $device['shop_items'] = $db->getAvailableItemsForGeraet($device['geraet_id'], 200); } unset($device); } $search_time = (microtime(true) - $start_time) * 1000; // Rechts: Artikel-/Ersatzteil-Suche (MySQL) $start_time2 = microtime(true); $item_results = $db->searchItems($search_term, 20); $item_search_time = (microtime(true) - $start_time2) * 1000; } } catch (Exception $e) { $error_message = $e->getMessage(); } ?> Krempl PostgreSQL Search Test

Krempl PostgreSQL Search Test

Fehler bei der Datenbankverbindung:

Geräte (PostgreSQL) — Treffer ( ms)

Keine Geräte gefunden.
= 100) $score_class = 'score-100'; elseif ($score >= 95) $score_class = 'score-95'; elseif ($score >= 90) $score_class = 'score-90'; elseif ($score >= 80) $score_class = 'score-80'; elseif ($score >= 75) $score_class = 'score-75'; elseif ($score >= 60) $score_class = 'score-60'; ?>

Ersatzteile / Artikel (MySQL items) — Treffer ( ms)

Keine Artikel gefunden.
Art-Nr: · Navision: · Lager: k.A.'; } elseif ((int)$inv > 0) { echo '' . (int)$inv . ' Stk'; } else { echo '0'; } ?>
= 100) return ['Exakter Treffer', '#2e7d32', '#e8f5e9', '✓']; if ($s >= 90) return ['Sehr wahrscheinlich dein Gerät','#388e3c', '#edf7ee', '✓']; if ($s >= 75) return ['Könnte passen', '#f9a825', '#fff8e1', '≈']; return ['Ähnlich – bitte prüfen', '#9e9e9e', '#f5f5f5', '?']; } // nml/Nachfolger steckt im Artikelnamen: "(nml)"/"(nmle)" + "Nachfolger " function v2_nml_info($name) { $is_nml = (bool)preg_match('/\(nml[e]?\)/i', $name); $nachf = null; // Nachfolger-Nummer muss mind. eine Ziffer enthalten (schließt "Nachfolger Original" aus) if (preg_match('/Nachfolger\s+([A-Za-z0-9\-\/\.]*\d[A-Za-z0-9\-\/\.]*)/i', $name, $m)) { $nachf = $m[1]; } $kein_ersatz = (stripos($name, 'kein Ersatz') !== false); // Anzeigename säubern: (nml)-Marker + "Nachfolger ... Original(teil)" raus $clean = preg_replace('/\s*\(nml[e]?\)\s*/i', ' ', $name); $clean = preg_replace('/\s*Nachfolger\s+[A-Za-z0-9\-\/\.]*\d[A-Za-z0-9\-\/\.]*\s*/i', ' ', $clean); $clean = preg_replace('/\s*(Originalteil|Original)\s*$/i', '', $clean); $clean = trim(preg_replace('/\s{2,}/', ' ', $clean)); return ['is_nml'=>$is_nml, 'nachfolger'=>$nachf, 'kein_ersatz'=>$kein_ersatz, 'clean'=>($clean ?: $name)]; } } // Treffer in "stark" (>=75) und "schwach" (<75) teilen $v2_strong = []; $v2_weak = []; foreach ($results as $d) { ((int)$d['score'] >= 75) ? $v2_strong[] = $d : $v2_weak[] = $d; } // Artikel klassifizieren: kaufbar / ausgelaufen-mit-Nachfolger / tot $g_buy = []; $g_succ = []; $g_dead = []; foreach ($item_results as $it) { $it['_nml'] = v2_nml_info($it['name']); if (!$it['_nml']['is_nml']) $g_buy[] = $it; // regulär elseif ($it['_nml']['nachfolger']) $g_succ[] = $it; // ausgelaufen, Nachfolger da else $g_dead[] = $it; // ausgelaufen, kein Ersatz } $v2_top_score = isset($results[0]) ? (int)$results[0]['score'] : 0; // Intent-Einordnung if ($v2_top_score >= 90) $v2_headline = 'Wir haben dein Gerät gefunden.'; elseif (count($v2_strong) > 0) $v2_headline = 'Das könnte dein Gerät sein:'; elseif (count($item_results)) $v2_headline = 'Passende Artikel gefunden:'; else $v2_headline = 'Mehrere mögliche Treffer – grenz gern ein.'; ?>
◇ Variante B – geführte Ansicht (Prototyp)
passende Geräte · kaufbare Artikel
$d): list($clabel,$ccol,$cbg,$cicon) = v2_confidence($d['score']); $parts = $d['ersatzteile'] ?? []; $buy = $d['shop_items'] ?? null; // nur wenn shop_items-Toggle an ?>
Typ: · Nr: · Baujahr:

✓ Sofort erhältlich für dieses Gerät ():

· 0) echo '· '.(int)$b['inventory'].' Stk'; ?>

passende Ersatzteile — Auswahl:

10): ?> + weitere
Weitere mögliche Geräte anzeigen () – schwächere Treffer
Typ: · Nr:

🛒 Diese Artikel kannst du direkt kaufen

0); // Bilder liegen nur auf LIVE → absolute URL $img = !empty($it['default_image_file_name']) ? 'https://intelectra.de/web/intelectra_shop/images/article/'.rawurlencode($it['default_image_file_name']) : ''; $pb = isset($it['price_brutto']) ? (float)$it['price_brutto'] : 0; $bb = !empty($it['bargain_brutto']) ? (float)$it['bargain_brutto'] : 0; ?>
kein Bild
Art-Nr
0 && $pb > 0 && $bb < $pb): ?>  €  € 0): ?>  € Preis auf Anfrage
0): ?>
inkl. MwSt.

🔄 Ausgelaufen – aber es gibt einen Nachfolger

Art-Nr · nicht mehr lieferbar
Nicht mehr lieferbar, kein Ersatz () – ausgeblendet
Art-Nr
✕ entfällt
💡 Prototyp-Notiz (nicht final): Bild (aus items.default_image_file_name, geladen vom Live-Server) + Preis (item_prices Kundengruppe 1, brutto inkl. Steuersatz, Angebotspreis rot) sind jetzt drin. nml/Nachfolger ist jetzt live: Der Marker (nml)/(nmle) im Artikelnamen wird erkannt — ausgelaufene Teile mit „Nachfolger <Nr>" landen im orangen Block und verlinken per Klick auf den kaufbaren Nachfolger; Teile ohne Ersatz werden ans Ende ausgeblendet. Score-Zahlen durch Vertrauens-Text ersetzt. Tipp: oben „Nur verfügbare Shop-Artikel" aktivieren zeigt pro Gerät die kaufbaren Teile grün.
Gib einen Suchbegriff ein (z.B. "AWB 921 PH", "ZCS 2100B", "Kohlefilter Bauknecht")