PDA

Vollständige Version anzeigen : MySQL-Query-Problem


ViTaCoKe
29-05-2007, 09:19
Hallo Leute!

Auch ich habe jetzt ein Problem.
Ich code einen Onlineshop und brauche Hilfe bei einer SQL-Query.
Die Query's, die ich derzeit in der Suchfunktion nutze lauten wie folgt (der Rest der Verarbeitung ist rausgeschnitten):


SELECT * FROM hp_shop_items WHERE item_name REGEXP 'Suchbegriff' OR item_desc REGEXP 'Suchbegriff' OR item_hersteller REGEXP 'Suchbegriff' OR item_battyp REGEXP 'Suchbegriff' ORDER BY item_name ASCund (basierend auf den Ergebnissen der letzten Query):

SELECT * FROM hp_shop_item_cat WHERE item_id='" . $obj->ID . "'$obj->ID beinhaltet die Item-ID (Artikelnummer, Unique)
Ich möchte jetzt die SQL's miteinander verknüpfen, sodass ich ein Limit in der ersten SQL auch in der zweiten nutzen kann, der will halt nicht so wie ich das will. Da einige Artikel in mehreren Kategorien vorkommen, muss ich mit 2 Tabellen arbeiten.
Ich hoffe, das, was ich euch jetzt geschildert habe reicht euch aus und ihr könnt mir helfen, mein Problem zu lösen!

Edit: Sehe gerade, dass mein Thread verschoben wurde. Wollte den auch hier reinschreiben, hab mich da wohl vertan, sorry.

EEBKiller
29-05-2007, 12:14
Was für ein "Limit" meinst du ? :confused:

ViTaCoKe
29-05-2007, 12:29
Das Limit ist... ich sage mal ... Nebensache. Es geht darum, dass ich mit der ID des Artikels (die ich in der Query ermittle), die Kategorien aus der anderen Query auslesen möchte.
Ich stelle mir die SQL ungefähr so vor (so funzt sie nur leider nicht):

SELECT * FROM hp_shop_items s, hp_shop_item_cat c WHERE item_id='ID aus hp_shop_items'

Verstehst du jetzt was ich meine?

(Diese SQL möchte ich hinterher um ein Ergebnislimit erweitern, dass es ungefähr so aussieht:
SELECT * FROM hp_shop_items s, hp_shop_item_cat c WHERE item_id='ID aus hp_shop_items' LIMIT 0, 4)

EEBKiller
29-05-2007, 12:51
Achso, das geht so nicht, wie dus möchtest, ausser du willst, dass sich der komplette Ergebnissatz immer wieder wiederholt, wenn ein Artikel in mehreren Kats ist.

Wenn ein Artikel nur in einer Kategorie wäre, wäre das Überhaupt kein Problem, aber in mehreren Kat's, das kriegste viel zu viel unnütze Daten raus.

Lass es in 2 Queries, da der erste ohnehin verhältnismäßig viel Performance fressen würde.

(Ich hab früher auch gedacht, je mehr man in ein SQL-Statement reinpackt, desto besser. Aber bei manchen Fällen Vervielfachst du damit nur die Abfragedauer im Gegensatz zu einzelnen Queries ...)

ViTaCoKe
29-05-2007, 13:07
Das Problem ist, dass es in einzelnen Queries nicht funktioniert, darum will ich auf 2 umsteigen. Die Abfrage, ob ein Artikel bereits angezeigt wurde ist ja kein Thema, den Müll kann ich ja rausfiltern.

ViTaCoKe
30-05-2007, 12:10
Ich darf voller Freude verkünden: Es hat sich erledigt!
Die SQL lautet wie folgt (komplett):
SELECT * FROM hp_shop_items s, hp_shop_item_cat c WHERE (c.item_cat='kategoriezahl' AND c.item_id=s.ID) AND
(s.item_name REGEXP 'suchbegriff' OR s.item_desc REGEXP 'suchbegriff' OR s.item_hersteller REGEXP 'suchbegriff' OR s.item_battyp REGEXP 'suchbegriff')
ORDER BY s.ID ASC

Vielen dank auf jedenfall für eure Hilfe!
Meinetwegen kann das Thema geschlossen werden.

Na gut, dann lass es auf, hast auch Recht ;)

AMD-Powered
30-05-2007, 13:08
Nöööö, das Thema bleibt mal schön offen evtl. kann es ja weitergenutzt werden, da der Threadtitel ja ziemlich allgemein gehalten ist und so auch anlehnende Probleme besprochen werden können. ;)

:thx: für die Lösung.