Query probleem met Kolom naam CALL
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 :-)
"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. ;-)
Heel erg bedankt!
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.
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
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. ;-)
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
Code (php)
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
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).
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
Als ik jouw was zou ik in ieder geval de maker even laten weten dat dit aangepast moet worden. Of een patch indienen.
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 ...).
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 :-)