MySql probleem [DRINGEND]

Gestart doorAntonn7 reacties17 weergaven

8 berichten · pagina 1 van 1

Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik heb een dringend probleem dat snel opgelost moet worden. Ik heb nu deze MySQL code:

SELECT link FROM links WHERE type=link AND aan=1 AND NOT id=(SELECT link_id FROM linkkliks WHERE user_id=8 AND datum LIKE 2012-03-19%)

Het probleem is dat als "SELECT link_id FROM linkkliks WHERE user_id=8 AND datum LIKE 2012-03-19%" geen rows bevat hij het niet doet. Kan ik iets maken (met MySQL) dat hij het deel " AND NOT id=(SELECT link_id FROM linkkliks WHERE user_id=8 AND datum LIKE 2012-03-19%)" weglaat als "SELECT link_id FROM linkkliks WHERE user_id=8 AND datum LIKE 2012-03-19%" geen rows bevat?

Echt heel hard bedankt als je oplossing vind worshippy
Mvg, ik
0
Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Waarom die AND NOT?
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Eleky schreef:
Waarom die AND NOT?
Omdat ik NIET wil dat er links met ids bij staat die ook hier gevonden worden.

Hier verwijst naar SELECT link_id FROM linkkliks WHERE user_id=8 AND datum LIKE 2012-03-19%
0
Berichten
2.399
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
beloning 0,3 aan mij kant wie dit kan maken, bvd.
0
Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Maar waarom dan niet: !=
0
Thom

Lid

Berichten
10.654
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Niet met php?
0
Berichten
35.796
Reputatie
1
Punten
0,00
Lid sinds
Laatst gezien
Tadaa:
SELECT link FROM links WHERE type=link AND aan=1 AND id NOT IN (SELECT link_id FROM linkkliks WHERE datum LIKE 2012-03-19% AND user_id=8)

(heb je where-clause ook meteen omgedraaid, zo is ie sneller als je data van veel dagen hebt)
en voordat je je tab nu wegklikt; je moet dat optimaliseren. Het wordt dramatisch sloom als je hem zo gaat uitvoeren als je meer rijen hebt.
Voeg in linkkliks een tabel dagdatum toe met formaat DATE, en zet daar de datum in. Je kunt dan zo checken:
SELECT link FROM links WHERE type=link AND aan=1 AND id NOT IN (SELECT link_id FROM linkkliks WHERE datum = 2012-03-19 AND user_id = 8)
wat een stuk sneller is dan een LIKE.

En natuurlijk een index op user_id en datum in linkkliks.

En er kan nog een GROUP BY in die subquery lijkt me, mits link_id niet uniek is, want nu check je tig keer dezelfde link_id-waardes.
0
Antonn

Lid · Topicstarter

Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Lennard schreef:
Tadaa:
SELECT link FROM links WHERE type=link AND aan=1 AND id NOT IN (SELECT link_id FROM linkkliks WHERE datum LIKE 2012-03-19% AND user_id=8)

(heb je where-clause ook meteen omgedraaid, zo is ie sneller als je data van veel dagen hebt)
en voordat je je tab nu wegklikt; je moet dat optimaliseren. Het wordt dramatisch sloom als je hem zo gaat uitvoeren als je meer rijen hebt.
Voeg in linkkliks een tabel dagdatum toe met formaat DATE, en zet daar de datum in. Je kunt dan zo checken:
SELECT link FROM links WHERE type=link AND aan=1 AND id NOT IN (SELECT link_id FROM linkkliks WHERE datum = 2012-03-19 AND user_id = 8)
wat een stuk sneller is dan een LIKE.

En natuurlijk een index op user_id en datum in linkkliks.

En er kan nog een GROUP BY in die subquery lijkt me, mits link_id niet uniek is, want nu check je tig keer dezelfde link_id-waardes.
Thanks voor info. Ik zal al aan plan C met PHP maar nu ga ik terug over op B wink
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren