abonnement Unibet Coolblue Bitvavo
pi_149751083


Als je vragen hebt over PHP/MySQL, dan zit je hier goed met een vaste kliek guru's en een groot aantal regelmatige bezoekers. Beperk je vragen niet tot "hij doet het niet" of "hij geeft een fout" - onze glazen bol is kapot en we willen graag van je weten wát er niet lukt en wélke foutmelding je precies krijgt :)

Zie ook:
PHP Dataverwerking
Officiële PHP website
PHP Documentatie
MySQL Reference Manual
Yet Another PHP Faq
PHP Cheat Sheet
PHP5 Power Programming - boek met uitleg over OOP, Pear, XML, etc

Tutorials:
W3Schools PHP
W3Schools SQL

Succes heren met het volgende deeltje!

1
2
3
4
5
6
explain SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link` 
WHERE `tag_id` = 2721 OR `tag_id` = 245
GROUP BY `video_id`
HAVING COUNT(`video_id`) = 2
LIMIT 0, 20
en daar heb ik ook last van een filesort... wil dat eigenlijk voorkomen ;) en dat zou moeten kunnen...

:{
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149752705
Ik weet niet wat je allemaal precies gedaan hebt, maar als ik even snel de volgende tabel aanmaak:

1
2
3
4
5
6
CREATE TABLE `video_tag_link` (
  `video_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id_index` (`video_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

en er vervolgens wat data ingooi en de query uit de OP uitvoer, dan krijg ik gewoon 'using where, using index'.

Kleine toevoeging:
Ik heb het vermoeden dat de oorzaak ligt in het feit dat je MyISAM als storage engine gebruikt in plaats van INNODB. Het is voor mij te lange geleden om exact te weten waardoor het verschil wordt veroorzaakt, maar volgens mij heeft het iets te maken met de manier waarop primary keys zijn geïmplementeerd. Hier een kleine uitleg.

[ Bericht 24% gewijzigd door Monolith op 17-02-2015 13:13:46 ]
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149757764
Ik heb
1
2
3
4
5
6
CREATE TABLE `video_tag_link` (
  `video_id` int(10) unsigned NOT NULL,
  `tag_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id` (`video_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;[
27,400,090 rows, MyISAM, latin1_swedish_ci, 952,3 MiB

En krijg dan met dezelfde query als hierboven Using where; Using index; Using temporary; Using filesort

-edit-
Inderdaad MyIsam, heb gepoogd InnoDB te gebruiken maar heb daar vele problemen mee om de data in te voeren op juiste manier zonder fouten...

-edit2-
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149758873
quote:
0s.gif Op dinsdag 17 februari 2015 13:13 schreef Chandler het volgende:
Ik heb
[ code verwijderd ]

27,400,090 rows, MyISAM, latin1_swedish_ci, 952,3 MiB

En krijg dan met dezelfde query als hierboven Using where; Using index; Using temporary; Using filesort

-edit-
Inderdaad MyIsam, heb gepoogd InnoDB te gebruiken maar heb daar vele problemen mee om de data in te voeren op juiste manier zonder fouten...

-edit2-
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
Mja, met 'krijg een -1 van de storage engine' kan ik niet zo veel.

Wat gebeurt er als je een nieuwe tabel maakt met INNODB als engine en de data daarin gooit?
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149760827
quote:
0s.gif Op dinsdag 17 februari 2015 13:13 schreef Chandler het volgende:
Ik heb
En het tabel omzetten naar InnoDB wil MySQL niet ;) Krijg een -1 van de storage engine...
quote:
If you see the following message, then you must enable innodb_file_per_table and create the table again: ERROR 1030 (HY000): Got error -1 from storage engine
http://www.percona.com/do(...)mporting_tables.html
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149761096
Volgens mij heb ik nog nooit anders dan InnoDB gebruikt? Ik dacht dat MyIsam een beetje ouderwets was?
pi_149761471
quote:
14s.gif Op dinsdag 17 februari 2015 14:58 schreef KomtTijd... het volgende:
Volgens mij heb ik nog nooit anders dan InnoDB gebruikt? Ik dacht dat MyIsam een beetje ouderwets was?
Voor archieven wordt het nog wel gebruikt. Kost stuk minder ruimte qua opslag.
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149766422
Ik heb even een tmp tabel met innodb aangemaakt, maar wanneer ik de eerste insert doe... krijg ik gelijk het volgende voor m'n kiezen.

INSERT INTO `video_tag_link` VALUES ( 1, 1 ) ;

MySQL meldt: Documentatie
#1062 - Duplicate entry '1-1' for key 'PRIMARY'

Precies dezelfde DB maar dan InnoDB plus complete inserts (want SELECT * INTO tabel FROM tabel) werkte ook niet...
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149766770
lijkt me een vrij duidelijke foutmelding waar je wat mee kunt.
pi_149766843
Helaas niet, want alle data in de myisam tabel is uniek en zou dus geen probleem moeten opleveren... heb al een uurtje zitten googlen maar kan geen 'oplossing' hiervoor vinden...
The people who lost my respect will never get a capital letter for their name again.
Like trump...
  dinsdag 17 februari 2015 @ 18:54:53 #11
187069 slacker_nl
Sicko pur sang
pi_149768697
quote:
0s.gif Op dinsdag 17 februari 2015 18:01 schreef Chandler het volgende:
Helaas niet, want alle data in de myisam tabel is uniek en zou dus geen probleem moeten opleveren... heb al een uurtje zitten googlen maar kan geen 'oplossing' hiervoor vinden...
Wat zegt select * from video_tag_link je? en hoe ziet die tabel eruit?
In theory there is no difference between theory and practice. In practice there is.
pi_149768989
Dit zijn inderdaad een beetje die 'het werkt niet, help me' post waar we erg weinig mee kunnen. Als je dit soort dingen post, geef dan de tabeldefinitie, data, query, enzovoort.
Probeer het ook eens op stackoverflow anders, daar zit ook nog wel de nodige kennis.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149771649
Bij deze een volledige uitleg.

Ik heb een link tabel voor het linken van tags aan video's, deze tabel is groot, erg groot en bevat maar 2 velden (video_id en tag_id). Uit dit tabel kan ik een of meerdere tags zoeken waarbij deze tags allemaal gevonden moeten worden bij ieder video_id.

Tabel:
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS `video_tag_link` (
  `video_id` int(10) unsigned NOT NULL,
  `tag_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`tag_id`,`video_id`),
  KEY `video_id` (`video_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
En wat data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
INSERT INTO `video_tag_link` (`video_id`, `tag_id`) VALUES
(1, 1),
(2, 1),
(3, 1),
(4, 1),
(5, 1),
(6, 1),
(7, 1),
(8, 1),
(9, 1),
(10, 1),
(11, 1),
(13, 1),
(15, 1),
(17, 1),
(18, 1),
(19, 1),
(20, 1),
(21, 1),
(22, 1),
(23, 1),
(25, 1),
(26, 1),
(27, 1),
(29, 1),
(30, 1),
(31, 1),
(32, 1),
(33, 1),
(35, 1),
(36, 1);

Probleem is filesort op de volgende query:
1
2
3
4
5
6
SELECT SQL_NO_CACHE `video_id`
FROM `video_tag_link` 
WHERE `tag_id` = 2721 OR `tag_id` = 245
GROUP BY `video_id`
HAVING COUNT(`video_id`) = 2
LIMIT 0, 20

1
2
3
4
5
6
7
8
9
10
1
SIMPLE
video_tag_link
range
PRIMARY,video_id
PRIMARY
4
NULL
6480
Using where; Using index; Using temporary; Using filesor

Omzetten op wat voor manier naar InnoDB wil niet... en queries optimaliseren ook niet :)
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149771719
Dat omzetten naar InnoDB niet werkt ligt toch echt aan jou of je MySQL setup. Ik krijg dat zonder moeite voor elkaar.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149781839
Zeer vreemd Monolith, ik gebruik zelf de standaard versie van usbwebserver en zou dus gewoon moeten werken lijkt me... krijg ook verder geen andere foutmeldingen oid...
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149783300
Lag inderdaad aan mijn webserver, heb alles opnieuw geconfigureerd en hoopa!! het werkt!! nu eens al mijn tabellen omzetten naar InnoDB!!
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_149786125
quote:
0s.gif Op maandag 16 februari 2015 23:14 schreef raptorix het volgende:

[..]

Volgens mij heeft een index geen zin op een integer, maar daar twijfel ik even over, of dat puur op numeriek is of een autoID (bestaat dat in MySql?)
Deze post uit het vorige topic verdient ook nog wel even een reactie aangezien het concept 'index' in deze reeks vaak niet echt begrepen lijkt en men enkel weet dat 'queries er sneller van worden', zonder het wat en waarom van een index te snappen. Deze site heeft wel prima verdere uitleg.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149788132
Stel, ik heb een Maria DB-database (voetbalgerelateerd) met daarin 3 tabellen:

- Divisie
- Seizoen
- DivisieSeizoen

Divisie en Seizoen:



DivisieSeizoen is de koppeltabel tussen Divisie en Seizoen, met wat extra gegevens.

Links voorbeeld van de koppeling, rechts hoe het wordt opgeslagen in de tabel.


Ik wil de gegevens via een HTML/PHP-formulier invoeren:

Divisie kiezen uit dropdownlist (waarden uit tabel Divisie).
Seizoen kiezen uit dropdownlist (waarden uit tabel Seizoen).
Datums handmatig invoeren.

Het resultaat hiervan wil ik opslaan in DivisieSeizoen. Ik wil dus een Divisienaam selecteren, maar de PK van de geselecteerde Divisie opslaan. Hetzelfde bij Seizoen.

Hoe krijg ik dit voor elkaar? Ik bedoel, ik heb op het internet gezocht, maar kan niets vinden waar ik zelf wat mee kan... Iemand van jullie een idee, wellicht een link naar een tutorial of wat dan ook?

Of denk ik verkeerd of hoort dit op een hele andere manier?!

[ Bericht 1% gewijzigd door #ANONIEM op 18-02-2015 11:26:19 ]
  woensdag 18 februari 2015 @ 11:30:32 #19
63192 ursel
"Het Is Hier Fantastisch!
pi_149788322
1
2
3
4
<select name="divisie" form="divisieform">
  <option value="1">Super lig</option>
  <option value="2">2. Lig</option>
</select>

Toon je de naam, maar de waarde die je formulier verstuurd is het ID.
pi_149788700
Nogal een brede vraag, basically vraag je "hoe maak ik een PHP webapplicatie met database?"

Watvoor framework gebruik je (if any)? En wat wil er precies niet lukken? Waar loop je op vast?
pi_149800925
quote:
0s.gif Op woensdag 18 februari 2015 09:46 schreef Monolith het volgende:

[..]

Deze post uit het vorige topic verdient ook nog wel even een reactie aangezien het concept 'index' in deze reeks vaak niet echt begrepen lijkt en men enkel weet dat 'queries er sneller van worden', zonder het wat en waarom van een index te snappen. Deze site heeft wel prima verdere uitleg.
Thx, ik kende deze theorie wel, ik weet niet hoet met mysql zit, maar in sqlserver kun je bij een index ook een fragmentation rate aangeven. Gebruik je niet heel vaak, maar met name wanneer performance belangrijk is valt er wel mee te tunen.

Zelf heb ik in verleden veel aan Funda gewerkt, met name aan de eerste versies heb ik veel aan de search gewerkt dus wel bekend met tuning ;)

De eerste versie van Funda was ook een readonly database, dat scheelt je al snel 30 procent performance omdat zodra een database in readonly is, hij geen rekening hoeft te houden met locking of aangepaste indices.
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149801283
Wij liepen trouwens ook een keer tegen een grappig index probleem aan, na een release was de performance dramatisch geworden, dit bleek achteraf omdat er een stukje SQL was aangepast waar een query werd gedaan via een UPPER cast zodat zoeken op plaats niet meer hoofdlettergevoelig was. Echter wanneer je een sqlserver database hebt die casesensitive is, je cast alles naar Hoofdletters in je query, dan zegt sql server: Mooi, dan is mijn index ook zinloos, laat ik die maar niet gebruiken :)
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149801826
quote:
0s.gif Op woensdag 18 februari 2015 18:39 schreef raptorix het volgende:

[..]

Thx, ik kende deze theorie wel, ik weet niet hoet met mysql zit, maar in sqlserver kun je bij een index ook een fragmentation rate aangeven. Gebruik je niet heel vaak, maar met name wanneer performance belangrijk is valt er wel mee te tunen.

Zelf heb ik in verleden veel aan Funda gewerkt, met name aan de eerste versies heb ik veel aan de search gewerkt dus wel bekend met tuning ;)

De eerste versie van Funda was ook een readonly database, dat scheelt je al snel 30 procent performance omdat zodra een database in readonly is, hij geen rekening hoeft te houden met locking of aangepaste indices.
Voor read only kun je tegenwoordig dan weer beter noSQL databases gebruiken doorgaans qua performance.
Fragmentatie is de mate waarin je index verspreid is over je opslag. Hoe meer fragmentatie, des te trager het gebruik van de index.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149804047
quote:
1s.gif Op woensdag 18 februari 2015 19:09 schreef Monolith het volgende:

[..]

Voor read only kun je tegenwoordig dan weer beter noSQL databases gebruiken doorgaans qua performance.
Fragmentatie is de mate waarin je index verspreid is over je opslag. Hoe meer fragmentatie, des te trager het gebruik van de index.
Fragmentatie is volgens mij in deze betekenis de mogelijkheden om je index te updaten, zoals ik het altijd begrepen hebt werkt het net als in papieren index dat je meer ruimte hebt om wijzigingen te doen (wat uiteraard wel ten koste gaat van meer opslag, en dus performance).
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149804805
quote:
0s.gif Op woensdag 18 februari 2015 20:03 schreef raptorix het volgende:

[..]

Fragmentatie is volgens mij in deze betekenis de mogelijkheden om je index te updaten, zoals ik het altijd begrepen hebt werkt het net als in papieren index dat je meer ruimte hebt om wijzigingen te doen (wat uiteraard wel ten koste gaat van meer opslag, en dus performance).
Nee, dat is een ander concept, fragmentatie heeft te maken met logische versus fysieke ordening, waardoor het lezen van de schijf trager gaat.
Zie bv:
https://msdn.microsoft.com/en-us/library/ms189858.aspx
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149805455
quote:
1s.gif Op woensdag 18 februari 2015 20:19 schreef Monolith het volgende:

[..]

Nee, dat is een ander concept, fragmentatie heeft te maken met logische versus fysieke ordening, waardoor het lezen van de schijf trager gaat.
Zie bv:
https://msdn.microsoft.com/en-us/library/ms189858.aspx
Klopt, ik doelde dus nie op fragmentatie maar op fillfactor ;)
Ik doe tegenwoordig nog maar weinig met Relationele databases :+

https://msdn.microsoft.com/en-us/library/ms177459.aspx
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
  woensdag 18 februari 2015 @ 21:14:21 #27
91039 mstx
2x1/2 = 1/2 x 1/2
pi_149807585
Ben sinds kort iets aan het maken met Symfony2/Doctrine. Dus ik heb in mijn database een TINYINT veld, zegt dat systeem dat het een boolean is. Welke idioot heeft dat bedacht? |:(
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
pi_149807761
Als het een Tinyint(1) is, dan klopt dat ook gewoon. :P
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149807805
Je hebt een bestaande database ingeladen of zo?

Een boolean wordt idd altijd als tinyint(1) opgeslagen.
  woensdag 18 februari 2015 @ 21:19:38 #30
91039 mstx
2x1/2 = 1/2 x 1/2
pi_149807834
quote:
0s.gif Op woensdag 18 februari 2015 21:18 schreef Monolith het volgende:
Als het een Tinyint(1) is, dan klopt dat ook gewoon. :P
Tinyint(1) = 0 t/m 9
Boolean = true/false

Hoe is dat het zelfde?
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
pi_149807930
quote:
10s.gif Op woensdag 18 februari 2015 21:19 schreef mstx het volgende:

[..]

Tinyint(1) = 0 t/m 9
Boolean = true/false

Hoe is dat het zelfde?
Volgens mij moet je even opzoeken wat die 1 betekent.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149807980
quote:
1s.gif Op woensdag 18 februari 2015 21:21 schreef Monolith het volgende:

[..]

Volgens mij moet je even opzoeken wat die 1 betekent.
die 1 betekend 1 teken lezen toch? :P
..///
pi_149807998
quote:
10s.gif Op woensdag 18 februari 2015 21:19 schreef mstx het volgende:
Tinyint(1) = 0 t/m 9
Nee, tinyint(1) is een integer van 1 bit, dus een boolean.
dat heb ik fout. Maar een boolean wordt wel altijd als tinyint(1) opgeslagen. Dus zo gek is het niet dat Doctrine die aanname doet.

[ Bericht 14% gewijzigd door KomtTijd... op 18-02-2015 21:28:35 ]
pi_149808184
quote:
0s.gif Op woensdag 18 februari 2015 21:22 schreef wipes66 het volgende:

[..]

die 1 betekend 1 teken lezen toch? :P
http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html

Kleine correctie inderdaad, het is de display width, maar tinyint(1) wordt in mysql gezien als synoniem van boolean.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149808325
quote:
14s.gif Op woensdag 18 februari 2015 21:22 schreef KomtTijd... het volgende:

[..]

Nee, tinyint(1) is een integer van 1 bit, dus een boolean.
mysql heeft geen echte boolean, dus 'boolean' is gewoon een allias voor tinyint(1) wat 8-bit is.
..///
  woensdag 18 februari 2015 @ 21:31:52 #36
91039 mstx
2x1/2 = 1/2 x 1/2
pi_149808498
quote:
14s.gif Op woensdag 18 februari 2015 21:22 schreef KomtTijd... het volgende:

[..]

Nee, tinyint(1) is een integer van 1 bit, dus een boolean.
dat heb ik fout. Maar een boolean wordt wel altijd als tinyint(1) opgeslagen. Dus zo gek is het niet dat Doctrine die aanname doet.
Als ik het verander naar tinyint(3) zegt hij nog steeds dat het een boolean is.
Ik wil gewoon het aantal versnellingen van een auto opslaan, een tinyint leek me daar het juiste type voor. :?
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
pi_149808699
quote:
0s.gif Op woensdag 18 februari 2015 21:31 schreef mstx het volgende:

[..]

Als ik het verander naar tinyint(3) zegt hij nog steeds dat het een boolean is.
Ik wil gewoon het aantal versnellingen van een auto opslaan, een tinyint leek me daar het juiste type voor. :?
Op zich wel, maar omdat doctrine types mapt tussen PHP en MySQL stelt het tinyint gelijk aan boolean kennelijk. Zie ook:
http://stackoverflow.com/(...)ype-in-entity-column
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149808730
quote:
0s.gif Op woensdag 18 februari 2015 21:31 schreef mstx het volgende:

[..]

Als ik het verander naar tinyint(3) zegt hij nog steeds dat het een boolean is.
Ik wil gewoon het aantal versnellingen van een auto opslaan, een tinyint leek me daar het juiste type voor. :?
Waarom maak je je uberhaupt druk om het database format? Laat dat lekker aan doctrine over. Die zal er waarschijnlijk een int van maken. Mocht je dat nog willen micro-optimaliseren naar een tinyint kun je dat doen na uitrol van je applicatie.
  woensdag 18 februari 2015 @ 21:45:52 #39
91039 mstx
2x1/2 = 1/2 x 1/2
pi_149809072
quote:
14s.gif Op woensdag 18 februari 2015 21:37 schreef KomtTijd... het volgende:

[..]

Waarom maak je je uberhaupt druk om het database format? Laat dat lekker aan doctrine over. Die zal er waarschijnlijk een int van maken. Mocht je dat nog willen micro-optimaliseren naar een tinyint kun je dat doen na uitrol van je applicatie.
Omdat ik die database al had en ik altijd de juiste datatypes probeer te gebruiken. :P En dan is het gewoon een beetje vreemd dat een auto ineens "true" versnellingen heeft terwijl er "6" in de database staat. :6
Op donderdag 2 juli 2009 22:41 schreef RTB het volgende:
als ik elk rap"liedje" een kans moest geven was ik aan het eind van dit millennium nog bezig met het tempo waarin die kotshoop uitgebraakt wordt.
👾
  † In Memoriam † woensdag 18 februari 2015 @ 22:49:11 #40
159335 Boze_Appel
Vrij Fruit
pi_149811836
quote:
1s.gif Op woensdag 18 februari 2015 21:36 schreef Monolith het volgende:

[..]

Op zich wel, maar omdat doctrine types mapt tussen PHP en MySQL stelt het tinyint gelijk aan boolean kennelijk. Zie ook:
http://stackoverflow.com/(...)ype-in-entity-column
Dat krijg je met dat soort systemen. PostgreSQL heeft geen tinyint en sqllite weer wel dus mappen ze inderdaad een tinyint naar een boolean.

mstx: Ik zou dan gewoon smallint gebruiken, dan heb je tenminste 32767 versnellingen voor- en achteruit of 65535 vooruit. :D
Carpe Libertatem
pi_149812152
quote:
10s.gif Op woensdag 18 februari 2015 21:19 schreef mstx het volgende:

[..]

Tinyint(1) = 0 t/m 9
Boolean = true/false

Hoe is dat het zelfde?
ENUM ('TRUE','FALSE') :P
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_149814618
quote:
0s.gif Op woensdag 18 februari 2015 21:45 schreef mstx het volgende:

[..]

Omdat ik die database al had en ik altijd de juiste datatypes probeer te gebruiken. :P En dan is het gewoon een beetje vreemd dat een auto ineens "true" versnellingen heeft terwijl er "6" in de database staat. :6
Je kunt je entities toch wel handmatig aanpassen naar het goeie format lijkt me?
pi_149818337
Alles kan, zo had ik een collega die het een goed idee vond om een nullable bool te gebruiken, en op die manier tristate te kunnen opslaan, nog nooit zoveel gezeik gehad met exports :r :9~
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
pi_149819074
quote:
0s.gif Op donderdag 19 februari 2015 08:51 schreef raptorix het volgende:
Alles kan, zo had ik een collega die het een goed idee vond om een nullable bool te gebruiken, en op die manier tristate te kunnen opslaan, nog nooit zoveel gezeik gehad met exports :r :9~
Daar is een boolean inderdaad niet voor bedoeld en het levert in SQL en veel andere talen doorgaans wel vrij onverwachte informatie op als je er logische operaties mee gaat uitvoeren.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_149819247
quote:
0s.gif Op donderdag 19 februari 2015 09:36 schreef Monolith het volgende:

[..]

Daar is een boolean inderdaad niet voor bedoeld en het levert in SQL en veel andere talen doorgaans wel vrij onverwachte informatie op als je er logische operaties mee gaat uitvoeren.
Ja klopt, er moest een sync proces via een automatisch tool naar Oracle worden gezet, in die tooling kon geen cast worden gedaan waardoor enige mogelijkheid was om al die velden te gaan omzetten, dit leverde ook weer allemaal gezeik op omdat een boolean in die tijd formeel geen null kon zijn in SQL Server, heeft echt weken gekost om dat goed gefixed te krijgen.
🕰️₿🕰️₿🕰️₿🕰️₿🕰️₿🕰️ TikTok next Block
  woensdag 25 februari 2015 @ 20:35:20 #46
37634 wobbel
Da WoBBeL King
pi_150042597
Help, ik zit in de knoei met een SQL query in PHP....

Ik heb een tabel met daarin hardware die besteld moet worden, zie onderstaande tabel:

tabel "bestellen"
volgende velden:

product
userdienodigheeft
userdiebesteldheeft

De user velden zijn ID's die ik vanuit een andere tabel "users" kan joinen

tabel "users"
iduser
naam

Als ik een JOIN die op de volgende manier kan dat prima als ik maar 1 user wil ophalen, maar hoe doe ik dat als ik de gegevens van 2 users wil ophalen? De bestelling kan nodig zijn voor user 1000 en besteld zijn door user 1028 namelijk :)

Huidige query waarmee ik maar 1 user ophaal

1
2
3
4
5
<?php
SELECT 
FROM bestellen
INNER JOIN users 
ON 
bestellen.userdienodigheeft users.IdUser 
?>

Mijn idee, welke uiteraard niet werkt was het volgt, maar hoe moet het wel??

1
2
3
4
5
6
7
<?php
SELECT 
FROM bestellen
INNER JOIN users 
ON 
bestellen.userdienodigheeft users.IdUser 
INNER JOIN users 
ON 
bestellen.userdiebesteldheeft users.IdUser )
?>

In beide gevallen krijg ik maar 1 veld terug, dat is 'naam' maar ik wil eigenlijk naamNodig en naamBesteld ofzo krijgen :)
pi_150042833
quote:
0s.gif Op woensdag 25 februari 2015 20:35 schreef wobbel het volgende:
Help, ik zit in de knoei met een SQL query in PHP....

Ik heb een tabel met daarin hardware die besteld moet worden, zie onderstaande tabel:

tabel "bestellen"
volgende velden:

product
userdienodigheeft
userdiebesteldheeft

De user velden zijn ID's die ik vanuit een andere tabel "users" kan joinen

tabel "users"
iduser
naam

Als ik een JOIN die op de volgende manier kan dat prima als ik maar 1 user wil ophalen, maar hoe doe ik dat als ik de gegevens van 2 users wil ophalen? De bestelling kan nodig zijn voor user 1000 en besteld zijn door user 1028 namelijk :)

Huidige query waarmee ik maar 1 user ophaal
[ code verwijderd ]

Mijn idee, welke uiteraard niet werkt was het volgt, maar hoe moet het wel??
[ code verwijderd ]

In beide gevallen krijg ik maar 1 veld terug, dat is 'naam' maar ik wil eigenlijk naamNodig en naamBesteld ofzo krijgen :)
Je doet twee Inner Joins op dezelfde tabel, volgens mij kun je er dan beter twee aparte queries van maken.

Maar je kunt het keyword 'as' gebruiken om bijnamen te geven aan kolomnamen.

[ Bericht 0% gewijzigd door #ANONIEM op 25-02-2015 20:44:54 ]
  woensdag 25 februari 2015 @ 21:02:41 #48
37634 wobbel
Da WoBBeL King
pi_150043787
quote:
0s.gif Op woensdag 25 februari 2015 20:40 schreef robin007bond het volgende:

[..]

Je doet twee Inner Joins op dezelfde tabel, volgens mij kun je er dan beter twee aparte queries van maken.

Maar je kunt het keyword 'as' gebruiken om bijnamen te geven aan kolomnamen.
Dat met die keywords/bijnamen begrijp ik, maar niet hoe ik aan de 2 namen van de users kom. Ik doe inderdaad twee joins op 1 tabel maar dat werkt uiteraard niet...

Ik zou een 2e query kunnen doen, maar dan zou ik dat voor élk resultaat moeten doen. Bij een pagina met 20 resultaten heb ik dan 21 queries (1 querie voor de resultaten inclusief join voor de 1e naam, en 20 voor de andere namen)
pi_150043875
quote:
0s.gif Op woensdag 25 februari 2015 21:02 schreef wobbel het volgende:

[..]

Dat met die keywords/bijnamen begrijp ik, maar niet hoe ik aan de 2 namen van de users kom. Ik doe inderdaad twee joins op 1 tabel maar dat werkt uiteraard niet...

Ik zou een 2e query kunnen doen, maar dan zou ik dat voor élk resultaat moeten doen. Bij een pagina met 20 resultaten heb ik dan 21 queries (1 querie voor de resultaten inclusief join voor de 1e naam, en 20 voor de andere namen)
Sorry, maar dan heb je je database waarschijnlijk niet optimaal ingericht. :@
pi_150045567
quote:
0s.gif Op woensdag 25 februari 2015 21:02 schreef wobbel het volgende:

[..]

Dat met die keywords/bijnamen begrijp ik, maar niet hoe ik aan de 2 namen van de users kom. Ik doe inderdaad twee joins op 1 tabel maar dat werkt uiteraard niet...

Ik zou een 2e query kunnen doen, maar dan zou ik dat voor élk resultaat moeten doen. Bij een pagina met 20 resultaten heb ik dan 21 queries (1 querie voor de resultaten inclusief join voor de 1e naam, en 20 voor de andere namen)
Je hebt mogelijk kolommen met eenzelfde naam zodat in het resultaat er één (unieke naam) overblijft.
Je kunt het oplossen door alternatieve namen in de SELECT te gebruiken. Bijvoorbeeld:
1
2
3
4
5
6
7
8
    SELECT b.*,
           u1.idUser AS idUser1, u1.naam AS naam1
           u2.idUser AS idUser2, u2.naam AS naam2
      FROM bestellen AS b
INNER JOIN users AS u1
        ON b.userdienodigheeft = u1.IdUser
INNER JOIN users AS u2
        ON b.userdiebesteldheeft = u2.idUser
(Ik weet niet welke kolommen er verder voorkomen).
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
  donderdag 26 februari 2015 @ 08:19:46 #51
37634 wobbel
Da WoBBeL King
pi_150057610
quote:
7s.gif Op woensdag 25 februari 2015 21:43 schreef Aether het volgende:

[..]

Je hebt mogelijk kolommen met eenzelfde naam zodat in het resultaat er één (unieke naam) overblijft.
Je kunt het oplossen door alternatieve namen in de SELECT te gebruiken. Bijvoorbeeld:
[ code verwijderd ]

(Ik weet niet welke kolommen er verder voorkomen).
Top, dit is hem inderdaad :) You saved my day, nu krijg inderdaad netjes de juiste namen te zien.

quote:
0s.gif Op woensdag 25 februari 2015 21:04 schreef robin007bond het volgende:

[..]

Sorry, maar dan heb je je database waarschijnlijk niet optimaal ingericht. :@
Die kans is aanwezig, maar soms moet je werken met wat je hebt :P
pi_150059766
Stabiele versie 1.0.0 appserver.io uitgebracht.
quote:
The objective of the project is to develop a multithreaded application server for PHP, written in PHP. Yes, pure PHP! You think we aren't serious? Maybe! But we think, in order to enable as many developers in our great community, this will be the one and only way. So with your help we hopefully establish a solution as the standard for enterprise applications in PHP environments.
http://appserver.io/
https://github.com/appserver-io/appserver
When the student is ready, the teacher will appear.
When the student is truly ready, the teacher will disappear.
pi_150061101
quote:
7s.gif Op donderdag 26 februari 2015 10:07 schreef Aether het volgende:
Stabiele versie 1.0.0 appserver.io uitgebracht.

[..]

http://appserver.io/
https://github.com/appserver-io/appserver
Ik heb een beter idee. Leer Java. :P
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_150135862
quote:
15s.gif Op woensdag 18 februari 2015 21:14 schreef mstx het volgende:
Ben sinds kort iets aan het maken met Symfony2/Doctrine. Dus ik heb in mijn database een TINYINT veld, zegt dat systeem dat het een boolean is. Welke idioot heeft dat bedacht? |:(
Je hebt met PHP te maken, elke idioot kan dat bedacht hebben (Ik heb de draad gelezen, het komt door mysql..)
In theory there is no difference between theory and practice. In practice there is.
pi_150136002
quote:
14s.gif Op woensdag 18 februari 2015 21:37 schreef KomtTijd... het volgende:

[..]

Waarom maak je je uberhaupt druk om het database format? Laat dat lekker aan doctrine over. Die zal er waarschijnlijk een int van maken. Mocht je dat nog willen micro-optimaliseren naar een tinyint kun je dat doen na uitrol van je applicatie.
Docterine zit fout m.i. De MySQL docs zeggen:

quote:
A value of zero is considered false. Nonzero values are considered true
Dat wilt dus zeggen dat een tinyint(1) veld dus: 0 of niet 0 moet teruggeven, als je if ($bool) doet, gaat die logica vanzelf goed, daar hoeven ze geen "true" of "false" van de maken. En mocht je echt willen dat een tinyint een boolean is, dan moet je dat ergens in je schema kunnen opnemen.

http://doctrine-dbal.read(...)reference/types.html Should be possible..
In theory there is no difference between theory and practice. In practice there is.
pi_150137744
Dat gaat je problemen opleveren wanneer je b.v. === true doet. De == operator in PHP is aardig verneukt.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_150138980
quote:
0s.gif Op zaterdag 28 februari 2015 08:57 schreef Monolith het volgende:
Dat gaat je problemen opleveren wanneer je b.v. === true doet. De == operator in PHP is aardig verneukt.
hoezo? ohhh omdat 0 === true is?
In theory there is no difference between theory and practice. In practice there is.
pi_150139104
quote:
1s.gif Op zaterdag 28 februari 2015 10:38 schreef slacker_nl het volgende:

[..]

hoezo? ohhh omdat 0 === true is?
Nee, omdat bijvoorbeeld 3 === true false oplevert en dergelijke checks dus falen als je de daadwerkelijke int waarden gebruikt.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_150139512
quote:
1s.gif Op zaterdag 28 februari 2015 10:45 schreef Monolith het volgende:

[..]

Nee, omdat bijvoorbeeld 3 === true false oplevert en dergelijke checks dus falen als je de daadwerkelijke int waarden gebruikt.
Doctorine moet gewoon niet naar het interne storageformaat kijken maar ergens in z'n schema files een definitie plaatsen van de kolom: boolean. Dat ie dat vervolgens mapped maar tinyint of supersmallint of weet ik het maakt dan niet uit. Null == false, idem voor 0 en de rest is true. Fixed. Dan kan je tinyint gebruiken in je DB en booleans zonder gezeik met true versnellingen.

Beetje ala
http://search.cpan.org/~g(...)ateColumn/Boolean.pm

[ Bericht 5% gewijzigd door slacker_nl op 28-02-2015 11:19:38 ]
In theory there is no difference between theory and practice. In practice there is.
pi_150139839
quote:
1s.gif Op zaterdag 28 februari 2015 11:06 schreef slacker_nl het volgende:

[..]

Doctorine moet gewoon niet naar het interne storageformaat kijken maar ergens in z'n schema files een definitie plaatsen van de kolom: boolean. Dat ie dat vervolgens mapped maar tinyint of supersmallint of weet ik het maakt dan niet uit. Null == false, idem voor 0 en de rest is true. Fixed. Dan kan je tinyint gebruiken in je DB en booleans zonder gezeik met true versnellingen.
Doctrine zelf is gewoon een ORM framework. Volgens mij gebruikt betreffende user gewoon een tooltje om op basis van een database schema de bijbehorende code te kunnen genereren. Doctrine werkt net als allerhande andere ORM frameworks met annotaties, waarbij je ook types op kunt geven.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_150165319
quote:
1s.gif Op zaterdag 28 februari 2015 11:06 schreef slacker_nl het volgende:

[..]

Doctorine moet gewoon niet naar het interne storageformaat kijken maar ergens in z'n schema files een definitie plaatsen van de kolom: boolean. Dat ie dat vervolgens mapped maar tinyint of supersmallint of weet ik het maakt dan niet uit. Null == false, idem voor 0 en de rest is true. Fixed. Dan kan je tinyint gebruiken in je DB en booleans zonder gezeik met true versnellingen.

Beetje ala
http://search.cpan.org/~g(...)ateColumn/Boolean.pm
Doctrine gebruikt ook de interne definitie. Als je aangeeft dat een veld een boolean bevat, krijg je een kolom voor booleans. Maar als je vervolgens een database gebruikt die geen booleans ondersteunt (zoals MySQL) dan krijg je een automatische fallback naar het kleinste numerieke formaat, ofwel de tinyint. Dat staat ook in de documentatie.
  zondag 1 maart 2015 @ 10:01:05 #62
187069 slacker_nl
Sicko pur sang
pi_150171253
quote:
0s.gif Op zondag 1 maart 2015 00:21 schreef Light het volgende:

[..]

Doctrine gebruikt ook de interne definitie. Als je aangeeft dat een veld een boolean bevat, krijg je een kolom voor booleans. Maar als je vervolgens een database gebruikt die geen booleans ondersteunt (zoals MySQL) dan krijg je een automatische fallback naar het kleinste numerieke formaat, ofwel de tinyint. Dat staat ook in de documentatie.
En toch gaat het fout, want de beste man heeft true versnellingen ipv 6. Daarom zeg ik: Docterine zit fout, omdat ze ervanuit gaan dat een tinyint een booleanish value is.
In theory there is no difference between theory and practice. In practice there is.
  † In Memoriam † zondag 1 maart 2015 @ 10:09:51 #63
159335 Boze_Appel
Vrij Fruit
pi_150171371
quote:
0s.gif Op zondag 1 maart 2015 10:01 schreef slacker_nl het volgende:

[..]

En toch gaat het fout, want de beste man heeft true versnellingen ipv 6. Daarom zeg ik: Docterine zit fout, omdat ze ervanuit gaan dat een tinyint een booleanish value is.
Doctrine gaat uit van meersere databasedrivers. Dan krijg je compromissen
Carpe Libertatem
pi_150239615
Ik ben voor m'n studie bezig met wat SQL opdrachten en nu zit ik erg te tobben met wat self-joins.

Het probleem is als volgt:

Tabel "Persons"
id
name
address
age
eyeColor
gender

Tabel "Likes"
id
personA_id → Persons
personB_id → Persons

Dan moet ik een query schrijven die als resultaat elke persoon geeft die iemand met blauwe ogen leuk vindt, zonder duplicates.

quote:
SELECT P.name
FROM Persons P, Likes L
WHERE P.id = L.personA_id AND ............
Het lijkt mij dat er na de AND weer een P.id = personB_id moet komen, maar dan wel waar de P.eyeColor = "blue" is.
Hoe krijg ik het voor elkaar om dat te doen?
pi_150240233
Selecten naar likes, persons 2x joinen.
pi_150240420
quote:
14s.gif Op dinsdag 3 maart 2015 09:18 schreef KomtTijd... het volgende:
Selecten naar likes, persons 2x joinen.
Aha, vraag me niet waarom maar ik dacht steeds Likes 2 keer te moeten joinen.

1
2
3
SELECT DISTINCT P1.name
FROM Persons P1, Persons P2, Likes L
WHERE P1.id = L.personA_id AND P2.id = L.personB_id AND P2.eyeColor ="blue"

Deze werkt, thanks :)
pi_150240450
Ik blijf het een irritante notatie vinden die impliciete joins, maar zo kan ook inderdaad ^O^
pi_150240483
quote:
14s.gif Op dinsdag 3 maart 2015 09:34 schreef KomtTijd... het volgende:
Ik blijf het een irritante notatie vinden die impliciete joins, maar zo kan ook inderdaad ^O^
Je zou het zelf dus anders gedaan hebben bedoel je?
Wat dan precies, en met welke gedachte erachter?
pi_150240955
Hoi,
Kan ik mbv SQL ook nummers genereren die voldoen aan de 11-proef?

Ik zoek dus een manier om, op basis van bv een gegeven als data of tijd, een nummer te genereren die ook nog eens voldoet aan de 11-proef voor het kunnen verkrijgen van een geldig BSN-nummer.

Momenteel gebruik ik een statement wat, op basis van een view en vaste gegevens, nummers toevoegt om zo tot een getal van 6 cijfers te komen:

to_char( sysdate, 'WW')||lpad(pst_vnr_seq.nextval,4,0 )

Is het mogelijk of moet het echt met een apart javascript?
pi_150240996
quote:
0s.gif Op dinsdag 3 maart 2015 10:01 schreef justme27 het volgende:
Hoi,
Kan ik mbv SQL ook nummers genereren die voldoen aan de 11-proef?

Ik zoek dus een manier om, op basis van bv een gegeven als data of tijd, een nummer te genereren die ook nog eens voldoet aan de 11-proef voor het kunnen verkrijgen van een geldig BSN-nummer.

Momenteel gebruik ik een statement wat, op basis van een view en vaste gegevens, nummers toevoegt om zo tot een getal van 6 cijfers te komen:

to_char( sysdate, 'WW')||lpad(pst_vnr_seq.nextval,4,0 )

Is het mogelijk of moet het echt met een apart javascript?
Ik begrijp niet zo goed wat javascript er mee te maken heeft, het beste kan je het ID dan laten genereren in PHP. In SQL zou ik het niet zo snel doen.
pi_150241518
quote:
0s.gif Op dinsdag 3 maart 2015 10:01 schreef justme27 het volgende:
Hoi,
Kan ik mbv SQL ook nummers genereren die voldoen aan de 11-proef?

Ik zoek dus een manier om, op basis van bv een gegeven als data of tijd, een nummer te genereren die ook nog eens voldoet aan de 11-proef voor het kunnen verkrijgen van een geldig BSN-nummer.

Momenteel gebruik ik een statement wat, op basis van een view en vaste gegevens, nummers toevoegt om zo tot een getal van 6 cijfers te komen:

to_char( sysdate, 'WW')||lpad(pst_vnr_seq.nextval,4,0 )

Is het mogelijk of moet het echt met een apart javascript?
Je kunt stored procedures schrijven in Mysql.
Volkorenbrood: "Geen quotes meer in jullie sigs gaarne."
pi_150241854
quote:
7s.gif Op dinsdag 3 maart 2015 10:03 schreef Scorpie het volgende:

[..]

Ik begrijp niet zo goed wat javascript er mee te maken heeft, het beste kan je het ID dan laten genereren in PHP. In SQL zou ik het niet zo snel doen.
Javascript was een voorbeeld. En ook omdat ik geen PHP kan gebruiken; mijn selectie als invoertaal is beperkt tot:

java
Javascript
Jython
Groovy
Mozilla Rhino
pi_150241880
quote:
0s.gif Op dinsdag 3 maart 2015 10:28 schreef Monolith het volgende:

[..]

Je kunt stored procedures schrijven in Mysql.
Ik ben helaas geen ontwikkelaar dus dit onderdeel (ik heb ff gelezen) wordt al snel te ingewikkeld voor mij.
pi_150243661
quote:
11s.gif Op dinsdag 3 maart 2015 10:47 schreef justme27 het volgende:

[..]

Ik ben helaas geen ontwikkelaar dus dit onderdeel (ik heb ff gelezen) wordt al snel te ingewikkeld voor mij.
Wat is precies je vraag dan? Hoe je überhaupt een 11-proef nummer kunt genereren? Lijkt me dat hier wel rekenvoorbeelden voor te vinden zijn toch?
  dinsdag 3 maart 2015 @ 11:49:52 #75
62215 qu63
..de tijd drinkt..
pi_150243860
quote:
14s.gif Op dinsdag 3 maart 2015 11:43 schreef KomtTijd... het volgende:

[..]

Wat is precies je vraag dan? Hoe je überhaupt een 11-proef nummer kunt genereren? Lijkt me dat hier wel rekenvoorbeelden voor te vinden zijn toch?
http://nl.wikipedia.org/wiki/Elfproef
It's Time To Shine
[i]What would life be like without rhethorical questions?[/i]
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')