Ik zie niks verkeerd aan deze query om heel eerlijk te zijn. Maar toegegeven SQL is niet mijn sterkste ding.quote:Op zaterdag 3 mei 2008 14:16 schreef Dzy het volgende:
Ik heb een vraagje
Ik ben bezig met een site waar een heleboel gedichten op komen te staan van dezelfde dichter. Deze kan hij taggen met meerdere tags, die allemaal weer in een aparte tabel tags staan. Omdat er meerdere tags bij meerdere gedichten kunnen gebruik ik een koppeltabel gedichten_tags. Alleen hoe kan ik nu mooi in 1 query alle gedichten opvragen die bij 1 of meer tags horen?
Ik zat zelf al een beetje te prutsen met de volgende query:
[ code verwijderd ]
Dit zou dan alle gedichten opvragen die een tag hebben van 1, 3 of 4 maar de bedoeling is natuurlijk dat ze alle drie zo getagd moeten zijn. En voor mijn gevoel is dit een ranzige query, maar dat kan ik verkeerd hebben. Ingewikkelde queries ben ik nog niet zo goed inWie kan me helpen?
1 2 3 4 | WHERE gedichten.gedicht_id = gedichten_tags.gedicht_id AND gedicht_tags.tag_id IN (1,3,4) GROUP BY gedichten.gedicht_id HAVING COUNT(*) = 3 |
Zie andere topic :Pquote:
1 2 3 4 5 6 7 8 9 | FROM gedichten g WHERE g.gedicht_id IN ( SELECT t.gedicht_id FROM gedichten_tags t WHERE t.tag_id IN (1, 3, 4) GROUP BY t.gedicht_id HAVING COUNT(*) = 3 ) |
omfgquote:Op donderdag 1 mei 2008 18:20 schreef Flaccid het volgende:
Ik heb een functie met die checkt of een variable leeg is of niet, wanneer hij leeg is zegt hij dat hij leeg is. Maar dan wordt het: Hoe krijg je de tekst van een variable die leeg is op het scherm, dus de naam van de lege variable?
[ code verwijderd ]
1 2 3 4 5 6 7 8 | WHERE (g.gedicht_id IN ( SELECT t.gedicht_id FROM gedicht_tags t WHERE t.tag_id IN (1,2) GROUP BY t.gedicht_id HAVING COUNT(*) = 2) ) AND (g.gedicht_boekje = '3') |
Zover ik tot nog toe heb ondervonden duren dit queries (dus met querie in querie) langer dan een join.quote:Op zaterdag 3 mei 2008 15:34 schreef SuperRembo het volgende:
[..]
Zie andere topic
Het zou (uitgaande van MySQL 5) zo iets worden:
[ code verwijderd ]
Een subquery dusquote:
In dit geval lukt het ook wel zonder sub-query, alleen wordt 't daar wat minder overzichtelijk van. En de vraag is of 't echt sneller is.quote:Op zaterdag 3 mei 2008 16:40 schreef ursel het volgende:
Zover ik tot nog toe heb ondervonden duren dit queries (dus met querie in querie) langer dan een join.
1 2 3 4 5 6 7 | FROM gedichten g INNER JOIN gedichten_tags t ON t.gedicht_id = g.gedicht_id WHERE g.gedicht_boekje = 3 AND t.tag_id IN (1, 3, 4) GROUP BY g.gedicht_id, g.titel HAVING COUNT(*) = 3 |
Wat bedoel je daar precies mee?quote:Op zaterdag 3 mei 2008 16:56 schreef CraZaay het volgende:
Zijn er hier überhaupt mensen bezig met memcached en dergelijke?
Eigenlijk wat er staatquote:
Een project wat ik voor NU.nl gedaan heb bijvoorbeeld (da's extreem), maar ook een jongerensite met een sociaal netwerk wat met 30.000 pageviews per dag al aardig wat zware queries oplevert.quote:Op zaterdag 3 mei 2008 18:56 schreef Xcalibur het volgende:
Aan wat voor bezoekersaantallen / queries moet ik denken als jij het over een drukke site hebt?![]()
Waarom zou memcached hier niet geschikt voor zijn? In dat geval check ik in de model of het result in de cache zit, en zo niet voer ik de query uit en sla het resultaat op in de cache met een time to live van 24 uurquote:Op zondag 4 mei 2008 01:17 schreef Farenji het volgende:
Memcache gebruik ik niet zo vaak maar ik gebruik wel regelmatig sql caching, waar het resultaat van een loodzware query geserialized wordt opgeslagen in een objectstorage in de db. Aan memory caching heb je in dit geval minder omdat het om queries gaat waar het resultaat hoogstens 1 keer per dag wijzigt en je aan alle bezoekers hetzelfde resultaat wil tonen. Die wil je dus ook maar 1 keer per dag berekenen, niet meer.
punt 3 is alleen uit te lezen bij @home en nog een geloof ik. Bij planet (mijn ISP) wordt het niet meegestuurd. Je hebt wel databases die dat soort info verzamelen en waar je beroep op kunt doen, sommige gratis, sommige niet.quote:Op maandag 5 mei 2008 09:14 schreef Chandler het volgende:
Kleine vraag, stel ik heb een hostname cc93022-a.tu.nogwat.home.nl
Van deze hostname wil ik het volgende uitlezen (maar dit kan natuurlijk ook een andere hostname zijn)
- home.nl
- home
- @home internet Groningen Nederland (dit kun je ergens uitlezen maar waar?)
Is er voor de 1e 2 een regex die ook werkt met co.uk en dergelijke domeinnamen? en waar kan ik de 3e gegeven weg halen?
SELECT MAX(id) FROM gegevens ?quote:Op maandag 5 mei 2008 14:54 schreef wobbel het volgende:
Ik heb een tabel met Auto Increment, hoe krijg ik nu heel makkelijk het laatste ID eruit?
Nu doe ik namelijk SELECT id FROM gegevens ORDER BY id DESC LIMIT 1, maar kan dat niet sneller?
quote:Op maandag 5 mei 2008 15:11 schreef wobbel het volgende:
[..]
moet ik die dan weer opvragen met mysql_fetch_assoc of kan dat ook met mysql_result ofzo?
1 2 3 | $laatste = mysql_result(mysql_query("SELECT MAX(id) FROM gegevens"),0); ?> |
Goede tip zegquote:Op maandag 5 mei 2008 16:36 schreef SuperRembo het volgende:
Als je de id wil weten van de row die je net ge-insert hebt, dan kan je beter mysql_insert_id() gebruiken.
Die kende ik gelukkig alquote:Op maandag 5 mei 2008 16:36 schreef SuperRembo het volgende:
Als je de id wil weten van de row die je net ge-insert hebt, dan kan je beter mysql_insert_id() gebruiken.
1 2 3 4 | USING SHOP_Carts.IdCart LEFT JOIN SHOP_Cartcontents.CartId = SHOP_Carts.IdCart WHERE SHOP_Carts.IdCart = '1' |
quote: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 '.IdCart WHERE SHOP_Carts.IdCart = '1'' at line 1
Moet het niet zijnquote:Op maandag 5 mei 2008 18:54 schreef wobbel het volgende:
[..]
Die kende ik gelukkig al ;)
Andere vraag: Ik heb onderstaande query, alleen daar is blijkbaar iets fout aan :P
[ code verwijderd ]
Foutmelding
[..]
1 |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |