Query probleem met Kolom naam CALL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bjorn Pas

Bjorn Pas

27/04/2018 15:58:29
Quote Anchor link
Ik heb een database waar een kolom naam Call heet.

Via een query lukt dit niet.. Call blijkt een commando te zijn.

"SELECT * FROM $db_table WHERE Call LIKE '%$searchq%' ORDER BY QsoDate DESC, TimeOn DESC"

Als ik nu de kolom naam verander in Calll dan werkt het wel.

Hoe kan ik het toch zo maken dat hij uit kolom: Call we uitleest?
Ik kan namelijk die naam niet veranderen in de database, dat is een gegeven.

Alvast bedankt voor het mee denken :-)
 
PHP hulp

PHP hulp

20/04/2024 11:53:52
 
- Ariën  -
Beheerder

- Ariën -

27/04/2018 16:19:16
Quote Anchor link
Backticks gebruiken:

"SELECT * FROM $db_table WHERE `Call` LIKE '%$searchq%' ORDER BY QsoDate DESC, TimeOn DESC"

Maar mijn voorkeur gaat er altijd naar uit om bestaande namen te vermijden. Het is altijd mogelijk om het aan te (laten) passen. ;-)
 
Bjorn Pas

Bjorn Pas

27/04/2018 16:26:00
Quote Anchor link
Hee Ariën wat super!, weer iets nieuws geleerd :-)

Heel erg bedankt!
 
Thomas van den Heuvel

Thomas van den Heuvel

27/04/2018 16:40:17
Quote Anchor link
Dit is uiteraard wel verwarrend. Wat je ook zou kunnen doen is kolomnamen een standaard prefix (voorvoegsel) geven, die de tabelnaam min of meer reflecteert.

Bijkomend voordeel daarvan is dat alle kolomnamen uniek zijn. Dit kan ook handig zijn als je in queries tabellen combineert, dan heb je niet vijf kolommen met de naam "id" of "name" ofzo.

Dit is natuurlijk een kwestie van smaak / conventies. Wat je op zijn minst zou moeten doen of proberen is het vermijden van het gebruik van gereserveerde woorden.
 
Bjorn Pas

Bjorn Pas

27/04/2018 16:43:23
Quote Anchor link
Bedankt voor de reactie.

Zoals ik al vermelde in mijn eerste post kan ik helaas de kolom naam niet veranderen.
Dit wordt gegenereerd door een veel gebruikt programma, daar heb helaas ik geen grip op.

Inderdaad een prefix is natuurlijk gewoon vele malen makkelijkere.. zoals COL_Call
 
- Ariën  -
Beheerder

- Ariën -

27/04/2018 16:46:37
Quote Anchor link
Quote:
Zoals ik al vermelde in mijn eerste post kan ik helaas de kolom naam niet veranderen.


Een issue op de bugtracker schieten, of een patch aanleveren in het versie-beheer is natuurlijk zo gedaan.
Ik denk dat de programmeurs daar ook wel blij van worden, als anderen welwillend meedenken of hun applicatie. ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

27/04/2018 16:52:16
Quote Anchor link
Quote:
Dit wordt gegenereerd door een veel gebruikt programma

Dit zou inhouden dat hier al meer mensen tegenaan moeten zijn gelopen lijkt mij? Zitten hier dan geen configuratie-opties in of bij?

Anders wordt het tijd om die makers eens een schop onder de kont te geven dan.
Gewijzigd op 27/04/2018 16:52:39 door Thomas van den Heuvel
 
Rob Doemaarwat

Rob Doemaarwat

27/04/2018 17:11:27
Quote Anchor link
Je kunt ook gewoon een alias aan je tabel hangen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM $db_table x WHERE x.Call LIKE '%$searchq%' ORDER BY x.QsoDate DESC, x.TimeOn DESC

Op deze manier kun je ook in joins (elke tabel z'n eigen alias) de boel uit elkaar houden, en hoef je niet elke kolom van een unieke prefix te voorzien.

Zelf heb ik nogal een hekel aan prefixen:
- je moet ze steeds intypen
- de boel "leest" niet lekker ("select iets from tabel" wordt "select whargarbl_iets from tabel")
- een mapping van kolommen naar object properties is "gedoe" (niet 1:1)
- bij een foreign key wordt het alleen maar complexer (wordt het dan prefixhier_prefixdaar_kolomnaam; of zonder de prefixhier, maar dan kun je bij joins alsnog niet zonder alias)
- een prefix wil je meestal kort houden (3 letters ofzo), maar als het project een beetje uit de hand begint te lopen (100+ tabellen) wordt het moeilijk om nog een unieke/duidelijke prefix te verzinnen
 
Thomas van den Heuvel

Thomas van den Heuvel

27/04/2018 17:28:18
Quote Anchor link
Wat handig is blijkt uit het gebruik, het is een middel om een doel te bereiken, het is geen doel op zichzelf.

Net zoals een alias een middel is, die in dit geval mogelijk handiger is omdat je blijkbaar met handen en voeten gebonden bent aan kolomnamen met gereserveerde woorden.

En over de argumenten hierboven: argumenten moet je niet tellen, maar wegen. Je zult zelf moeten bepalen hoe belangrijk deze voor jou zijn (en meestal toegepast op een specifiek probleem).
 
Aad B

Aad B

29/04/2018 12:15:33
Quote Anchor link
Dit gaat over Reserved Words en het is vreemd dat een standaard pakket of cms het woord CALL gebruikt......
Toch een beetje knoeiwerk, zeker het werken met backticks is armoe want ga je nu alleen CALL met backticks doen of werkelijk alle kolommen en tabellen in selects/updates/deletes? Backticks is een vervelende erfenis uit phpadmin ofzoiets, dat wil je toch niet?
Voor reserved words en keywords zie:
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
Gewijzigd op 29/04/2018 12:19:59 door Aad B
 
- Ariën  -
Beheerder

- Ariën -

29/04/2018 12:20:18
Quote Anchor link
Wat aad B. zegt.
Als ik jouw was zou ik in ieder geval de maker even laten weten dat dit aangepast moet worden. Of een patch indienen.
 
Rob Doemaarwat

Rob Doemaarwat

29/04/2018 17:23:32
Quote Anchor link
Toch vind ik dat je hier als programmeur ook een beetje flexibel (lees: vooruit denken) mee om moet kunnen gaan (en maar niet meteen "een ander" semi verplichten z'n systeem aan te passen). Misschien werkt dit bronsysteem wel op meerdere database systemen, en is het in de favo database van deze ontwikkelaar geen reserved word. Of is het gewoon een CSV/XML/whatever export die 1:1 in een tabel wordt ingelezen. Er komen ook steeds meer keywords bij, dus wat in de ene versie wel werkt(e), geeft opeens problemen in de nieuwe/andere versie.

Dan kun je dus twee dingen doen:
- of je prefixt alles zodanig "complex" dat die prefix combinatie het never nooit tot een nieuwe keyword schopt,
- of je werkt met backtics of aliassen (wel zorgen dat je alias niet een reserved word is/wordt ...).
 
Bjorn Pas

Bjorn Pas

01/05/2018 13:45:21
Quote Anchor link
bedankt allemaal voor het mee denken.
Zelf denk ik dat het laat voor wat het is.
Dit namelijk omdat ik net kom kijken in de wereld van PHP en nog niet alles 100% begrijp hoe het werkt.
We doen het hier gewoon mee.. de truuk van de backticks werkt prima voor nu :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.