Toon posts:

[MySQL] Ingewikkelde query *

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste MedeTweakers,
Ik zit met een probleempje :)
Ik wil een MySQL query uitvoeren waar ik maar 1 keer een variable kan gebruiken.


Deze Select query werkt dus


Select * FROM TABLE where column = '%iets'
Als ik nu de volgende query uit wil voeren werkt die niet

Select * FROM TABLE where column = '%iets' OR column2 = '%iets'

Heeft iemand een idee hoe ik die %iets via MySQL zeg maar 2 keer kan gebruiken?
De gene die dit weet krijgt van mij 5 EUR voor de query :) ik heb hem echt nodig :D

Groetjes Daan

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Probeer eens || ipv OR te gebruiken.

Verwijderd

Topicstarter
Heej :)
De query op zich lukt wel :)
Het probleem is dat ik de variable %iets helaas maar 1 keer kan uitlezen :S
Het moet dus zeg maar zoiets worden :D
Select * from Tabel where column = '%iets' AS iets where column2 = iets
Ik kan het eigenlijk niet uitleggen :S
Ik kan die %iets variable maar 1 keer gebruiken terwijl ik twee keer wil kijken of er een kolom bestaat die %iets bevat en die wil ik dan selecteren :)
Groetjes Daan

[ Voor 91% gewijzigd door Verwijderd op 26-10-2003 09:04 ]


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Volgens de docs beginnen variables niet met %. (http://www.mysql.com/doc/en/Variables.html)
Bij mij werkt SELECT * FROM test WHERE a=@test || b=@test; wel.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Voorbeeldtabel:
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    2 |    3 |
|    3 |    4 |
+------+------+

SET @test=2;
SELECT * from tester where a=@test || b=@test;
+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    2 |    3 |
+------+------+

Verwijderd

Topicstarter
Beste Zr40

Ik heb een variable die door een programma als output wordt gegeven.
Deze wil ik graag twee keer gebruiken in een SLEECT query.
Het programma laat mij toe de variavble 1 keer uit te lezen.
Zodat ik in principe alleen een simpele select kan doen.
De vraag is nu of je in MySQL de variable kan opslaan of iets deregelijks en die daarna in een tweede STATEMENT kunt gebruiken :)


Groetjes Daan

Verwijderd

Topicstarter
Dit is dus precies wat ik bedoel :D, geweldig!! :)

SET @test=2;
SELECT * from tester where a=@test || b=@test;

Alleen wil ik dit in 1 Query dan kan ik het bijvoorbeeld zo doen:

SET @test='%iets';
SELECT * from tester where a=@test || b=@test;

alleen dan in 1 Query :)


Groetjes Daan

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Dat lijkt me simpel dan. SET @tijdelijkevariable = %anderevariable;
Je kan meerdere statements in een enkele query zetten. :)

[ Voor 34% gewijzigd door Zr40 op 26-10-2003 09:20 . Reden: Nieuwe reply niet gezien ]


Verwijderd

Topicstarter
Hahahah :)
Was het maar zo simpel :)
Ik heb ook al gekeken of het misschien met een SubQuery kan in MySQL 4 :) maar ik zou niet weten hoe :D

Verwijderd

Topicstarter
hmmm :)
dus ik moet die SELECT en die SET en een UNSET of iets dergelijks in query kunnen zetten?


Groetjes Daan

  • mjax
  • Registratie: September 2000
  • Laatst online: 14-05 11:00
Even offtopic, maar wat is het verschil tussen || en OR in een MySQL query?

  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

SET @test='%iets'; SELECT * from tester where a=@test || b=@test;
Sim-pel :P
mjax schreef op 26 October 2003 @ 09:22:
Even offtopic, maar wat is het verschil tussen || en OR in een MySQL query?
Niets, maar ik had vroeger problemen met OR/AND die opgelost werden met ||/&&, misschien lag het daar aan :P

[ Voor 67% gewijzigd door Zr40 op 26-10-2003 09:23 ]


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Als het om het matchen van een string gaat dan zou je zoiets kunnen proberen:
SELECT * FROM tester WHERE a+'|'+b LIKE @test
(Heeft nog wat aanpassing nodig, het gaat om het idee)

| Toen / Nu


Verwijderd

Topicstarter
Tevergeefs :S
De query werkt wel in MySQL maar niet in de software :S
Ik krijg een SQL syntax near 'SELECT :S
Heb je misschien nog een idee? :P
hahaha :)
je hebt het in principe opgelost :D maar het programma laat het niej toe :(


Edit:
Sorry het is:
You have an error in your SQL syntax near ';

[ Voor 15% gewijzigd door Verwijderd op 26-10-2003 09:35 ]


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Het lijkt erop dat je dan een losse ' of een niet afgesloten string in je query hebt staan.

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Verwijderd schreef op 26 October 2003 @ 09:33:
You have an error in your SQL syntax near ';
Near wat? Welke query gebruik je nu? Moet er nog een ; achter?

| Toen / Nu


Verwijderd

Topicstarter
Hmmmm,
De Query werkt gewoon in MySQL :)
Het programma is in C geschreven :)
Zou de query dan niet me escapes gebruikt moeten worden of iets dergelijks?
en welke escapes dan? :D

[ Voor 11% gewijzigd door Verwijderd op 26-10-2003 09:41 ]


Verwijderd

Topicstarter
Ik snap het al :D
Doordat er een ; in de query staat denkt het programma dat de query is afgesloten :S

Verwijderd

Topicstarter
Ik denkd at we in de verkeerde richting aan het kijken zijn.
Dit is eigenlijk niet 1 query meer, het MOET echt met 1 QUERY :)

Verwijderd

Topicstarter
Kijk eens aan :)
code:
1
2
3
4
5
6
11.1.3.44 mysql_real_query()

int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length) 

Description
Executes the SQL query pointed to by query, which should be a string length bytes long. The query must consist of a single SQL statement. You should not add a terminating semicolon (`;') or \g to the statement.

Dat is dus het probleem :)
er wordt een mysql_real_query gebruikt :S en daarbij mag geen ; gebruitk worden :S

[ Voor 92% gewijzigd door Verwijderd op 26-10-2003 10:27 ]


Verwijderd

SELECT * FROM table_name WHERE %iets IN ( column1 , column2 )

Andere (minder mooie) mogelijkheid:

SELECT * FROM table_name WHERE CONCAT( '!=!', column1 , '!=!', column2 , '!=!' ) LIKE '%!=!%iets!=!%'

Waarbij je nog wel die %-tekens in de string wellicht moet escapen om die variabele %iets te kunnen toevoegen.

Eventueel kun je nog:

SELECT * FROM table_name WHERE CONCAT( '!=!', column1 , '!=!', column2 , '!=!' ) LIKE CONCAT( '%!=!', '%iets', '!=!%' )

gebruiken.

Nadelen:
- concat vergt rekentijd van MySQL
- doordat de waarde achter de LIKE met een % begint, kan MySQL z'n indexen niet meer gebruiken (al betwijfel ik het dat hij het met zo'n concat uberhaupt al indexen kan gebruiken).

Gebruik voor '!=!' een string die zeker niet kan voorkomen in column1 en 2; als beide kolommen gewoon getallen zijn, kun je een string van één letter gebruiken.

(queries getest met MySQL 4.0.15)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

Verwijderd schreef op 26 October 2003 @ 09:21:
hmmm :)
dus ik moet die SELECT en die SET en een UNSET of iets dergelijks in query kunnen zetten?


Groetjes Daan
Hoi Daan,
je hoeft (en mag :)) niet onder elke post groetjes zetten, ook een "hallo allemaal" is overbodig.

veel plezier nog :)

Klaar voor een nieuwe uitdaging.


Verwijderd

Topicstarter
Beste Jigal,
Ik heb de QUERY onder Mysql 3.23 geprobeerd en die werkt perfect!
Alleen het probleem is :) dat ik twee keer een andere statement gebruik :S
Ik gebruik een keer select * from tabel where column = '%iets' en ik gebruik een tweede statement met een concat :S
ALs ik die concat zou uitvoeren via 1 van deze optie's krijg ik het probleem dat ik altijd het zelfde resultaat krijg :S


Het zou dus eigenlijk zoiets moeten wezen:

SELECT * FROM VirtualHosts WHERE CONCAT( '!=!', Hostname , '!=!', Hostname , '!=!' ) LIKE CONCAT( '%!=!', '%iets%', '!=!%!' ) OR LIKE CONCAT( '%!=!', '%$iets%', '!=!%!' );
Waarbij MySQL bijvoorbeeld die %iets in $iets zet zodat ik die later nogmaals kan opvragen :)

[ Voor 36% gewijzigd door Verwijderd op 26-10-2003 16:41 ]


Verwijderd

Misschien is het handig dat je even kort de tabel layout beschrijft, welke informatie je daaruit wilt halen en dat je maar 1x "%iets" mag gebruiken. Wellicht dat we dan tot een oplossing kunnen komen.

Nu lijkt het een beetje op het spelletje ik-heb-een-raadsel-en-bij-iedere-oplossing-verander-ik-de-regels :) .

Tip: te specifieke vragen leiden vaak niet tot een oplossing... ("hoe kan ik met een hamer een schroef in het hout draaien?" geeft andere resultaten dan "hoe krijg ik twee planken aan elkaar, terwijl ik de beschikking heb over een hamer, schroeven, spijkers, paperclips en garen?")

Verwijderd

Topicstarter
Hhahaha sorry :)

Het gaat er dus om dat ik een variable maar 1 keer mag gebruiken om te selecteren


We hebben een database
Tabelnaam boer
code:
1
2
3
4
5
6
7
8
9
10
|id||column1|
  1      1
  2      9
  3      3
  4      6

%variable = 5
Stel ik heb een query

SELECT * from boer where colum1 = ' %variable ' OR colum1=sum( %variable +1);

dan krijg ik dus als output de 6 uit column 1

Maar....
Ik kan maar 1 keer %variable gebruiken.
Bij de OR statement is hij dus al leeg :S,
Hoe moet ik die %variable dan selecteren uit de DataBase.
Dat is dus DE vraag :) haha
Ik hoop dat je hier iets van snapt :D

[ Voor 13% gewijzigd door Verwijderd op 26-10-2003 17:39 ]


  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Ik vind eerlijk gezegd een vrij vaag verhaal.

Het is me niet duidelijk of je een scripttaal gebruikt om die queries uit te voeren en zo ja, welke je dan gebruikt.

Daarnaast vraag ik me af waar die %variabele vandaan komt, aangezien je die niet zodanig (naar mijn weten) in MySQL kan gebruiken maar eerder @variabele voor dient te gebruiken.

Ten slotte vraag ik me af wat het uiteindelijke doel is, of in ieder geval zou het wel wat duidelijker zijn als je zegt wáár die %variabele vandaan komt, is het een scriptvariabele of een mysqlvariabele, of je die weet voordat je de query uitvoert, of je die via een scripttaal hebt bepaald, of zo nee, op wat voor andere wijze dan wel.

Zonder deze info blijft het een beetje gissen wat je uiteindelijk wil.

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
Mijn vraag is absoluut gericht op MySQL.
Ik heb zelf een applicatie gevonden die ik niet kan bewerken.
Ik kan alleen in de configuratie een query bewerken.
Die query mag maar 1 keer een variable opnemen
die variable is maar een voorbeeld
dat kan netzogoed $Variable wezen of geen variable.
Het gaat om het principe van die variable.

  • slm
  • Registratie: Januari 2003
  • Laatst online: 12-11-2023

slm

Dan vrees ik dat het niet gaat werken wat jij wil.

Je kunt nog wel dit proberen:
Select @iets:=eenvalue, table.* FROM TABLE where column = eenvalue;

en vervolgens
Select * FROM TABLE where column = @iets OR column2 = @iets;

maar dit gaat er vanuit dat je in de eerste query wel 2 maal "eenvalue" mag zetten/gebruiken, aangezien de "select @iets:=eenvalue" niet in effect komt tijdens diezelfde query maar pas ná die query. Oplossing hiervoor is natuurlijk "set @iets=eenvalue" te gebruiken, maar dat kon je niet.

Stel dat "eenvalue" in feite 576 is.

Dan krijg je dus:

Select @iets:=576, table.* FROM TABLE where column = 576;
en vervolgens
Select * FROM TABLE where column = @iets OR column2 = @iets;

Dit bovenstaande werkt. Het onderstaande _NIET_ :

Select @iets:=576, table.* FROM TABLE where column = @iets;
en vervolgens
Select * FROM TABLE where column = @iets OR column2 = @iets;

To study and not think is a waste. To think and not study is dangerous.


Verwijderd

Topicstarter
Beste SLM,
Helaas is de oplossing niet zo makkelijk :)
Er is maar 1 Query die uitgevoerd kan/moet worden.
Anders kon ik ok een set @variable doen :)
Maar dat kan helaas niet :(
De query is helaas steeds verschillend :)
Dat is het moie van het gebruik van een DataBase :)

[ Voor 22% gewijzigd door Verwijderd op 26-10-2003 19:55 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Amendo_NL: wil je voortaan even het Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif-knopje boven je posts gebruiken als je iets toe te voegen hebt aan je post? Ruim de helft van de posts in dit topic is nu van jou, en dat schiet niet echt op voor de overzichtelijkheid :)

Professionele website nodig?


Verwijderd

Topicstarter
Als je even goed kijkt zie je dat dat reply's zijn en geen schopjes oid

Verwijderd

Verwijderd schreef op 26 October 2003 @ 17:26:
Het gaat er dus om dat ik een variable maar 1 keer mag gebruiken om te selecteren
SELECT * from boer where colum1 = '%variable' OR colum1=sum( %variable +1);

Ik kan maar 1 keer %variable gebruiken.
Bij de OR statement is hij dus al leeg :S,
Hoe moet ik die %variable dan selecteren uit de DataBase.
Aangezien die variabele %variabele niet door MySQL wordt ingevuld, maar door de "taal" eromheen, kan MySQL 'm ook niet meer opdiepen.

Wat je wel kan doen is je query zodanig schrijven dat je 'm maar een keer hoeft in te vullen; jouw voorbeeld hierboven (je gebruikt altijd een OR !) is om te schrijven naar:
SELECT * FROM boer WHERE %variable IN (column1, (column1 - 1));

Bij een AND kun je de AND blijven gebruiken:
SELECT * FROM boer WHERE column1=%variable AND column2=%variable+1;
wordt dan:
SELECT * FROM boer WHERE column1=%variable AND column2=column1+1;

Tja, ik zie het probleem nog steeds niet...

Verwijderd

Topicstarter
YesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYesYes


Je hebt het hem geflikt!!!!!!!!!!! :D
Mag ik je rekeningnummer? :D
Het gaat om het gebaar :D en de zorgen die je me hebt bespaard :D hahahah Woehoeeeee!!!
:)

[ Voor 91% gewijzigd door Verwijderd op 28-10-2003 19:30 ]


Verwijderd

Topicstarter
Heej, :)
tid dus niet gelukt :S
op de tweede statement moet een concat uitgevoerd worden.
Ik dachtd at het lukte omdat er op het resultaat een concat werd uitgevoerd :S de regel die als eerste uit de database komt :(
Pagina: 1