[MySQL] Verloren posts zoeken

Pagina: 1
Acties:

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 26-05 17:34

--MeAngry--

aka Qonstrukt

Topicstarter
Ik heb al een tijd een forum draaien op m'n site alleen nu is de indeling van het forum nogal eens veranderd (ben continu aan het ontwikkelen).
In de tussentijd heb ik dan PHPMyAdminsgewijs (nieuw woord B) ) onnodige topics verwijderd maar er niet aan gedacht de bijbehorende posts ook even te verwijderen.
Ondertussen is dat forum 100 topics en 1000 posts groot en ik wil die verloren posts toch even makkelijk uit die database vissen.

Makkie, dacht ik:
SQL:
1
2
3
4
5
6
SELECT p.postid
FROM `forum-posts` AS p
WHERE NOT EXISTS
 (SELECT t.topicid
  FROM `forum-topics` AS t
  WHERE t.topicid = p.topicid);

Maar MySQL 4.0.18 heeft dan zoiets van FU ga maar lekker je reet afvegen met je EXISTS en je subquery. Hoe los ik dit makkelijk op?

Kheb ook al het volgende geprobeerd:
SQL:
1
2
3
SELECT *
FROM `forum-posts` AS p, `forum-topics` AS t
WHERE NOT EXISTS t.topicid = p.topicid;

Maar dat werkt vanzelfsprekend ook niet echt O-)

Tis jammer dat de search niet werkt want misschien dat dit nog wel te vinden was. Iemand die misschien zo weet hoe je dit zonder subqueries kunt oplossen? :)

Tesla Model Y RWD (2024)


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
JOINs to the rescue :? Denk dat het daarmee wel moet lukken :)

[ Voor 26% gewijzigd door ludo op 08-04-2004 15:09 ]


  • Arnout
  • Registratie: December 2000
  • Laatst online: 22:23
WHERE p.topicid NOT IN (SELECT topicid FROM topic)

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 26-05 17:34

--MeAngry--

aka Qonstrukt

Topicstarter
Ja, maar dan zal ik toch ook een soort van NOT EXISTS moeten gebruiken? :?
MetHod schreef op 08 april 2004 @ 15:09:
WHERE p.topicid NOT IN (SELECT topicid FROM topic)
NOT IN, dat zocht ik! :) Khad al op mysql.com gezocht naar iets van vervangingen, maar kon nix vinden behalve dat mij telkens werd vermeld dat subqueries nog niet goed ondersteunt werden in MySQL lager dan v4.1. :/
Ik ben ook nog niet geweldig lang met SQL bezig maar ik ben ermee bezig :)

[edit]
Ehm, dit gaat ook weer in een subquery waar MySQL dus weer een error op geeft :'(
code:
1
2
3
4
5
6
7
8
9
10
SELECT p.postid
FROM `forum-posts` AS p
WHERE p.topicid NOT IN
 (SELECT t.topicid
  FROM `forum-topics` AS t)

MySQL returned:
#1064 - You have an error in your SQL syntax.
Check the manual that corresponds to your MySQL server version for the
right syntax to use near 'SELECT t.topicid FROM  `forum-topics`  AS t )' at l

[ Voor 77% gewijzigd door --MeAngry-- op 08-04-2004 15:17 ]

Tesla Model Y RWD (2024)


  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
--MeAngry-- schreef op 08 april 2004 @ 15:10:
[...]

Ja, maar dan zal ik toch ook een soort van NOT EXISTS moeten gebruiken? :?
Hmmm ja dat is waar... Dat riep ik iets te snel :) Dat is toch iets lastiger...

[ Voor 6% gewijzigd door ludo op 08-04-2004 15:13 ]


  • Arnout
  • Registratie: December 2000
  • Laatst online: 22:23
Laat dat t.topicid en AS t eens weg?

dus gewoon

SELECT topicid FROM forum-topics;

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 26-05 17:34

--MeAngry--

aka Qonstrukt

Topicstarter
MetHod schreef op 08 april 2004 @ 15:19:
Laat dat t.topicid en AS t eens weg?

dus gewoon

SELECT topicid FROM forum-topics;
Nee, maakt niets uit.

Ik zie in de MySQL Manual duidelijk staan, dat voor subqueries voor het moment nog andere, soms vrij ingewikkelde oplossingen moeten worden gezocht.
Het begint er op te lijken dat er gewoon geen oplossing is. :/

[ Voor 1% gewijzigd door --MeAngry-- op 08-04-2004 15:21 . Reden: typo ]

Tesla Model Y RWD (2024)


  • Arnout
  • Registratie: December 2000
  • Laatst online: 22:23
--MeAngry-- schreef op 08 april 2004 @ 15:21:
[...]

Nee, maakt niets uit.

Ik zie in de MySQL Manual duidelijk staan, dat voor subqueries voor het moment nog andere, soms vrij ingewikkelde oplossingen moeten worden gezocht.
Het begint er op te lijken dat er gewoon geen oplossing is. :/
This can be rewritten as:

code:
1
2
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
                                       WHERE table2.id IS NULL;


Dit voorbeeld uit de manual voldoet prima in jouw situatie. Even mee prutsen.

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 26-05 17:34

--MeAngry--

aka Qonstrukt

Topicstarter
MetHod schreef op 08 april 2004 @ 15:28:
[...]


This can be rewritten as:

code:
1
2
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
                                       WHERE table2.id IS NULL;


Dit voorbeeld uit de manual voldoet prima in jouw situatie. Even mee prutsen.
Tnx! Na een beetje spelen heb ik het voor elkaar gekregen :) :>

Tesla Model Y RWD (2024)


Verwijderd

wat doe je moeilijk?

SELECT
post.*,
topic.*
FROM
post
LEFT JOIN
topic
ON
topic.id = topic.forum_id
WHERE
topic.id IS Null

ofzoiets :)

of... je doet 2 queries..

1 alle topic id's uitlezen
2 alle post verwijzingen naar topic id's

bestaat post.topic_id niet? remove :)

[ Voor 29% gewijzigd door Verwijderd op 08-04-2004 20:00 ]

Pagina: 1