[MySQL 4>] subquery?

Pagina: 1
Acties:

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Ik heb wat code in PHP:

code:
1
2
3
    $items = mysql_query ("SELECT * FROM nieuws WHERE real_date LIKE '$i%' AND active!='no' OR status!='deleted' 
                           ORDER BY real_date, id")
        or die("Query failed : " . mysql_error());


Waarbij het de bedoeling is dat hij alle rijen selecteerd beginnend met jaartal $i en waarbij OF active=no OF status=deleted niet meegenomen mogen worden.

nu is bovenstaand fout omdat hij met de OR de eerste twee statement meet en is bijna alles goed. Nu heb ik het geprobeerd met een subquery waarbij hij eerst alle active=no OF status=deleted eruit haalt, maar dat lukt me maar niet.

Iemand een idee? thnx

mijn naam slaat nergens op, althans niet op mij :P


Verwijderd

Haakjes gebruiken.

... AND ( ... OR ... )

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 22:04
En geen "!=", maar NOT (...)

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


  • JnX
  • Registratie: Februari 2001
  • Laatst online: 18-01 22:08

JnX

GarBaGe schreef op 19 mei 2004 @ 19:04:
En geen "!=", maar NOT (...)
Of <>

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
GarBaGe schreef op 19 mei 2004 @ 19:04:
En geen "!=", maar NOT (...)
wat is daar mis mee? Wordt toch gewoon door MySQL ondersteund?

Nog iemand die dat vind :)
Gek, is dat echt zo slecht?

[ Voor 17% gewijzigd door Zoolander op 19-05-2004 19:08 ]

mijn naam slaat nergens op, althans niet op mij :P


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Verwijderd schreef op 19 mei 2004 @ 19:02:
Haakjes gebruiken.

... AND ( ... OR ... )
werkt niet.... heb het nu zo:
p

code:
1
2
3
    $items = mysql_query ("SELECT * FROM nieuws WHERE real_date LIKE '$i%' AND (active!='no' OR status!='deleted')
                           ORDER BY real_date, id")
        or die("Query failed : " . mysql_error());


maar selecteerd nog altijd alles.... :(

mijn naam slaat nergens op, althans niet op mij :P


Verwijderd

Ik heb je vraag nog eens gelezen, en denk dat ik je gewoon niet goed heb begrepen.
Als je alle rijen wilt die
• beginnen met een bepaald jaartal
• niet inactief zijn
• niet deleted zijn
Als dit zo is, dan is het een kwestie van ... AND ... AND ...

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Geef eens een record in je tabel die volgens jouw niet geselecteerd zou moeten worden?

[ Voor 5% gewijzigd door Infinitive op 19-05-2004 19:21 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Infinitive schreef op 19 mei 2004 @ 19:20:
Geef eens een record in je tabel die volgens jouw niet geselecteerd zou moeten worden?
real_date=2004-04-05 active=yes status=deleted
real_date=2004-05-06 active=no status=" "
real_date=2004-05-12 active=no status=deleted

Deze drie zouden nooit mogen worden geselecteerd.

Dus zowel deleted moet blank staan als active op yes.

mijn naam slaat nergens op, althans niet op mij :P


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Verwijderd schreef op 19 mei 2004 @ 19:20:
Ik heb je vraag nog eens gelezen, en denk dat ik je gewoon niet goed heb begrepen.
Als je alle rijen wilt die
• beginnen met een bepaald jaartal
• niet inactief zijn
• niet deleted zijn
Als dit zo is, dan is het een kwestie van ... AND ... AND ...
Maar pakt hij dan niet alleen de records die EN deleted zijn EN niet active?

mijn naam slaat nergens op, althans niet op mij :P


  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 19:21
Dan is het toch AND ... OR ?

Strava | AP | IP | AW


Verwijderd

Zoolander schreef op 19 mei 2004 @ 19:25:

Maar pakt hij dan niet alleen de records die EN deleted zijn EN niet active?
Nee, hij pakt dan alleen de records die EN NIET deleted zijn EN NIET inactive.

En ik stel voor dat je de volgende keer het eerst even probeert, en als het dan werkt dan betekent dat dat je er nog maar eens goed over na moet denken.

[ Voor 24% gewijzigd door Verwijderd op 19-05-2004 19:27 ]


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
GarBaGe schreef op 19 mei 2004 @ 19:04:
En geen "!=", maar NOT (...)
Daar ben ik ook mee begonnen, maar dat werkt niet.

Iemand een idee hoe je dit bijvoorbeeld met een subquery of hoe dan ook kan oplossen?

mijn naam slaat nergens op, althans niet op mij :P


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Verwijderd schreef op 19 mei 2004 @ 19:26:
[...]

Nee, hij pakt dan alleen de records die EN NIET deleted zijn EN NIET inactive.

En ik stel voor dat je de volgende keer het eerst even probeert, en als het dan werkt dan betekent dat dat je er nog maar eens goed over na moet denken.
Oke, dan ga ik verder spitten waarom het niet werkt.
Ik geloof je.

Bedankt allen!

Dan edit ook even :) Ik heb zowel AND als OR gebprobeerd, maar hij pakt nog steeds een deel.... ik denk dat het ergens anders in mijn code zit.

[ Voor 15% gewijzigd door Zoolander op 19-05-2004 19:29 ]

mijn naam slaat nergens op, althans niet op mij :P


  • raps
  • Registratie: April 2003
  • Laatst online: 31-12-2025
nevermind...
(khad het draaidje nog open staan)

[ Voor 75% gewijzigd door raps op 19-05-2004 19:36 ]


  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

Omdat ik zo aardig ben, maar eigenlijk is het hierboven al met woorden door Cheatah gezegd.

code:
1
2
SELECT * FROM nieuws WHERE real_date LIKE '$i%' AND active <> 'no' AND status <> 'deleted'
ORDER BY real_date, id


!= is geen standaard SQL en daarom adviseer ik het gebruik van <>, zoals anderen ook al aangaven.

PS. dit heeft niks met subqueries te maken.

[ Voor 45% gewijzigd door MatHack op 19-05-2004 21:18 . Reden: uitleg van != en <> ]

There's no place like 127.0.0.1


  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
real_date=2004-04-05 active=yes status=deleted
real_date=2004-05-06 active=no status=" "
real_date=2004-05-12 active=no status=deleted

Deze drie zouden nooit mogen worden geselecteerd.
Ok, dus je kan het ook zien als: active mag niet no zijn of status mag niet deleted zijn.

Dan zou ik zeggen:
code:
1
AND NOT(active=no OR status=deleted)


Dit is equivalent aan (vanwege het naar binnen propageren van de not):
code:
1
AND (NOT(active=no) AND NOT(status=deleted))

code:
1
AND active<>no AND status <> deleted


En dat laatste heeft Cheatah al genoemd. En door MatHack. Maar dan zie je ook de reden.

[ Voor 7% gewijzigd door Infinitive op 21-05-2004 10:57 ]

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Well, dank voor de aanwijzingen.
Op de MySQL site staat dat != wel degelijk van MySQL is, maar het zal wel weer niet zo zijn dan ;)
Ik gebruik gewoon wel <> omdat ik niet zeker weet hoe en wat.
Bekijk deze link eens voor de grap:
http://dev.mysql.com/doc/mysql/en/Comparison_Operators.html
Daar staat hij wel bij, maar ook weer niet in het voorbeeld.

Inmiddels werkt het allemaal.

mijn naam slaat nergens op, althans niet op mij :P


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

MySQL definieert de != wel, maar het is nog steeds geen standaard SQL. MySQL doet daar niet altijd even sterk aan, maar als je kan kiezen tussen twee equivalente constructies waarbij de ene wel en de andere niet aan een standaard voldoet, kan je meestal het best voor die constructie kiezen, die wel aan die standaard voldoet :)

En bij zoiets simpels als != vs <> is de keus dan natuurlijk snel gemaakt ;)
Pagina: 1