MySQL-Problem mit subqueries und limit

hallo,

ich wollte eine MySql-Abfrage lokal ausführen und bekomme eine Fehlermeldung.
führe ich die abfrage aber im phpadmin-beplaced aus, erhalte ich keinen fehler.

mein mysql lokal ist MySQL - 5.0.21 Protokoll-Version: 10

vielleicht liegt der fehler ja an meiner lokalen mysql-version?

zu meinem subquery:

(SELECT name FROM table2 WHERE id=a AND anzeige=1 ORDER BY hits LIMIT 0,1) AS XY

damit geht es. setze ich das limit allerdings auf 1,1, dann bekomme ich die fehlermeldung, dass mehrere rows ausgeliefert werden.
Führe ich das subquery alleine aus mit limit 1,1, erhalte ich aber nur ein row. habe das subquery auch schon mit ANY ausprobiert - gleicher fehler.
kann mir jemand helfen?

der nach SQL gültige Syntax für Limit lautet folgendermaßen:

vll. baut der MySQL-Server bei der Analyse des Querys auf diesen Syntax.

habe es nun mal mit 1 OFFSET 1 statt 1,1 versucht - gleicher Fehler

#1242 - Subquery returns more than 1 row

hingegen funktioniert das subquery alleine mit limit 1,1, bzw 1 offset 1 einwandfrei und liefert nur 1 row

Ist in dem Fall keine eindeutige Zuweisung über eine primäre Spalte möglich? Das ist in 99% aller Fälle besser geeignet, als so halbgenaue zuweisungen.

das verstehe ich nicht genau. kannst du bitte ein allgemeines beispiel geben?

in meinem fall ist es so:

es gibt tabelle 1 und tabelle 2.
tabelle 1 sind die kategorien und in tabelle 2 die items.

ich möchte tabelle 1 auflisten und dazu jeweils die besten 3 items

Dann mach auf jeden Fall einen eigenen Query für die 3 besten Items. Der zusätzliche Query braucht nicht mehr Zeit als die 3 Subqueries :wink:

und wenn ich das dennoch in einem query mit subs machen möchte?

es muss doch irgendwie gehen - wozu gibt es sonst die subs, wenn man deiner meinung nach alles in eigenen queries realisieren sollte?

[quote=“spielbande”]es gibt tabelle 1 und tabelle 2.
tabelle 1 sind die kategorien und in tabelle 2 die items.

ich möchte tabelle 1 auflisten und dazu jeweils die besten 3 items[/quote]
Auch wenn diese Beschreibung des Datenmodells immer noch ziemlich dürftig ist (bitte etwas genauer beschreiben, welche Abhängigkeiten bestehen), behaupte ich mal, dass du deine Subquery „in die falsche Richtung” machst.

[quote]zu meinem subquery:

(SELECT name FROM table2 WHERE id=a AND anzeige=1 ORDER BY hits LIMIT 0,1) AS XY[/quote]
Wenn das die Subquery ist (in der wohl offenbar nur der Wert der Spalte id von der „äusseren” Query abhängig ist), dann verstehe ich nicht, wie du mit dieser Query auf eine Anzahl von 3 Items kommen willst.

ich wollte die subs ja für die 3 jeweils mit 0,1 - 1,1 ind 2,1 machen.

hier mal mein kompletter query:

$query = ‘SELECT , id as a, (SELECT count() from #__joomlaflashgames where catid=a and published=1) as numlinks (SELECT id from #__joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1id, (SELECT gamefile from #__joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1file, (SELECT imagefile from #__joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1image, (SELECT title from #__joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1title’ FROM #__joomlaflashgames_categories WHERE published = 1 ORDER BY title ASC’;

den ich dann um 1,1, bzw. 2.1 erweitern wollte

wie oben angemerkt. mit 0,1 läuft alles wunderbar

Schau ich mir vielleicht dann mal an, wenn du es ordentlich formatierst. (Also erst mal keinen PHP-Code zeigen, sondern SQL - und das dann auch übersichtlich eingerückt und umgebrochen.)

Und die genauere Beschreibung des Datenmodells, die steht auch noch aus.

Schau ich mir vielleicht dann mal an, wenn du es ordentlich formatierst. (Also erst mal keinen PHP-Code zeigen, sondern SQL - und das dann auch übersichtlich eingerückt und umgebrochen.)

Und die genauere Beschreibung des Datenmodells, die steht auch noch aus.

boah

[quote]
SELECT , id as a, (SELECT count() from a_joomlaflashgames where catid=a and published=1) as numlinks
(SELECT id from a_joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1id,
(SELECT gamefile from a_joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1file,
(SELECT imagefile from a_joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1image,
(SELECT title from a_joomlaflashgames where catid=a and published=1 order by hits limit 0,1) as spiel1title’
FROM a_joomlaflashgames_categories WHERE published = 1 ORDER BY title ASC’/[/quote]

also mit 0,1 funzt alles wunderbar. will ich aber 1,1 machen kollabiert es

PS: ich hoffe es ist euer ehren entsprechend formatiert, umgebrochen und eingerückt. ent-php’t habe ich es so gut ich konnte

[quote=„spielbande“]und wenn ich das dennoch in einem query mit subs machen möchte?

es muss doch irgendwie gehen - wozu gibt es sonst die subs, wenn man deiner meinung nach alles in eigenen queries realisieren sollte?[/quote]
Wenn du 2 eigene Queries hast, sind es im Endeffekt 2 Queries

Wenn du das mit den ganzen Subqueries machst, ist es 1 Query + 3 Subs = 4 Queries…
Dann kannst du mal raten, was schneller geht :ps:

Subqueries haben nur in Ausnahmesituationen einen Sinn, und sicher nicht damit man 3 Zeilen nacheinander per Subquery lädt.

Allgemein sind sowiso JOINs vorzuziehen wo es geht.

dank eurer konstruktiven hilfe habe ich nun mein problem gelöst.
ich habe keine subqueries mehr, sondern mehrere queries.

danke nochmal fürs mithelfen