abonnement Unibet Coolblue Bitvavo
pi_63018604
quote:
Op donderdag 6 november 2008 23:27 schreef ursel het volgende:
Ik begrijp dus eigenlijk dat het niet mogelijk is om een kolom te excluden??

@slacker, Maar als je nou een associative array fetched?? Dan maakt dit toch ook niet uit? Of zie ik iets over het hoofd?
Dan maakt het idd weinig uit, maar dat schreef Slacker ook al. Hij heeft het dan over hashes, maar da's gewoon hetzelfde.

En imho ben je gewoon onhandig bezig als je arrays met numerieke indexen gebruikt voor het uitlezen van een database. Dan moet je altijd terugzoeken in welke volgorde de velden gespecificeerd zijn om te achterhalen waar $row[2] ook alweer voor stond. $row['name'] is gewoon veel duidelijker.
  vrijdag 7 november 2008 @ 00:09:15 #152
187069 slacker_nl
Sicko pur sang
pi_63018892
Wat Light zei over hashes, das hetzelfde als een associatieve array.
quote:
Nu kan je natuurlijk ook de zooi dmv een hash terugkrijgen, waardoor het niet echt veel uitmaakt, maar dit is wel degelijk van belang bij een sequentiele array.
In theory there is no difference between theory and practice. In practice there is.
  vrijdag 7 november 2008 @ 00:10:54 #153
12880 CraZaay
prettig gestoord
pi_63018930
quote:
Op donderdag 6 november 2008 22:55 schreef slacker_nl het volgende:

Je begrijpt me verkeerd, stel... iemand dumpt de database, maakt wijzigingen in de dump, dropped de originele table en creeert opnieuw de table, alleen zijn val en val2 van volgorde gewijzigd. Bij select * is de volgorde van val en val2 dus anders dan jij in eerste instantie verwacht.. Als je select val, val2 gebruikt veranderd er niks, en heb je dus ook geen problemen met deze wijziging..
Ik snap je nu. Maar ik ging er eigenlijk ook vanuit dat iedereen die "SELECT *" doet alsnog gebruik maakt van een named/associatieve array, object, whatever, en $result['val'] gebruikt bijvoorbeeld. Ik vind het uitermate ranzig om in welke situatie dan ook maar klakkeloos uit te gaan van een volgorde, los van of je * gebruik of kolomnamen.

edit: En er was nog een pagina Wat Light zegt dus.
pi_63100207
Schop!

Of zet 'm eens centraal ofzo....
  maandag 10 november 2008 @ 13:27:43 #155
187069 slacker_nl
Sicko pur sang
pi_63100409
Waarom centraal, dev forum is niet zo groot dat je 'm over het hoofd ziet. En dat ie in het weekend wat zakt..
In theory there is no difference between theory and practice. In practice there is.
pi_63100460
toch staan er weer een stuk of 3 php-topics open omdat'ie uit het moederforum DIG gezakt is.
  maandag 10 november 2008 @ 18:52:13 #157
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63108691
Volgende vraag!

Ik heb het volgende
1
2
3
4
5
<?php
SELECT reg
.idreg.branche_code AS branche_codebranche.name AS branche_namebranche.total_in AS total 
                                   FROM reg_reg reg
                                    LEFT JOIN reg_branche branche ON reg
.branche_code ON branche.code
?>


Maar zou het graag als volgt willen doen:

1
2
3
4
5
<?php
SELECT reg
.idreg.branche_code AS branche_codebranche.name AS branche_namebranche.total_in AS total 
                                   FROM reg_reg reg
                                    LEFT JOIN reg_branche branche ON reg
.branche_code LIKE '%,'branche.code',%'
?>



Let op de LIKE in de LEFT JOIN.... is dit mogelijk? Het lukt iig niet, hoe zou het wel kunnen lukken?
  maandag 10 november 2008 @ 19:23:23 #158
107951 JortK
Immer kwaliteitsposts
pi_63109572
Die LIKE moet in je WHERE clause, je JOIN clause is om tabellen aan elkaar te koppelen, niet om criteria in aan te leggen
  maandag 10 november 2008 @ 19:31:48 #159
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63109825
Weet ik, maar ik heb zo'n idee dat dat niet in WHERE kan?
  maandag 10 november 2008 @ 19:41:00 #160
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63110137
Het moet namelijk een like zijn met een veld van de tabel
pi_63110391
JOINS zijn alleen maar syntax sugar, dus iets als dit zou ook moeten werken:

Voor een INNER JOIN:
1
2
3
4
5
6
<?php
SELECT
reg
.idreg.branche_code AS branche_codebranche.name AS branche_namebranche.total_in AS total 
FROM reg_reg reg
reg_branche branche
WHERE reg
.branche_code LIKE '%,'branche.code',%'
?>


Of een LEFT JOIN
1
2
3
4
5
6
<?php
SELECT
reg
.idreg.branche_code AS branche_codebranche.name AS branche_namebranche.total_in AS total 
FROM reg_reg reg
reg_branche branche
WHERE 
(reg.branche_code LIKE '%,'branche.code',%' OR reg.branche_code IS NULL)
?>
pi_63111925
quote:
Op maandag 10 november 2008 19:41 schreef Likkende_Lassie het volgende:
Het moet namelijk een like zijn met een veld van de tabel
Wat staat er in dat veld?
Over het algemeen moet je LIKE met "%text%" zien te vermijden. Door de % vooraan kan er namelijk geen gebruik gemaakt worden van indexen, dus is je query per definitie inefficient.
pi_63112061
quote:
Op maandag 10 november 2008 19:23 schreef JortK het volgende:
Die LIKE moet in je WHERE clause, je JOIN clause is om tabellen aan elkaar te koppelen, niet om criteria in aan te leggen
Onzin
quote:
Op maandag 10 november 2008 19:48 schreef Arjan321 het volgende:
JOINS zijn alleen maar syntax sugar, dus iets als dit zou ook moeten werken:

Voor een INNER JOIN:
[ code verwijderd ]

Of een LEFT JOIN
[ code verwijderd ]
Ook onzin, maar dan met niet werkende voorbeelden.


Een LIKE in een JOIN kan prima (wat niet wil zeggen dat het altijd de beste keus is om een like in een join te gebruiken). En joins zijn meer dan alleen syntax sugar, ze maken query's bijvoorbeeld beter leesbaar (wat de kans op fouten verkleint).

1
2
3
SELECT *
FROM reg_reg r
LEFT JOIN reg_branche b ON r.branche_code LIKE Concat('%', b.code, '%')


Je moet de string die je voor de like gebruikt op de juiste manier aan elkaar plakken. Je kunt in MySql strings niet bij elkaar optellen. D.w.z. het kan wel (heet geeft geen fouten), maar aan het resultaat heb je niets.

Maar als je zo'n constructie nodig hebt dan zit je datamodel misschien niet al te handig in elkaar.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  maandag 10 november 2008 @ 20:44:23 #164
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63112320
quote:
Op maandag 10 november 2008 20:33 schreef Light het volgende:

[..]

Wat staat er in dat veld?
Over het algemeen moet je LIKE met "%text%" zien te vermijden. Door de % vooraan kan er namelijk geen gebruik gemaakt worden van indexen, dus is je query per definitie inefficient.
In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,
Bedankt voor de reacties tot nu toe!

Bovenstaande oplossingen werken overigens niet.
Hierbij de gehele query, zoals de laatst genoemde mogelijkheid, niet werkend.

1
2
3
4
5
mysql_query("SELECT register.id, register.branche_code AS branche_code, branche.name AS branche_name, branche.total_in AS total 
                                   FROM register_register register
                                    LEFT JOIN register_branches branche ON branche.code = LIKE Concat('%', register.branche_code, '%')
                                   WHERE register.id IN (".$sphinx['result']." 0) AND total_in > 0 AND branche.in_small_overview > 0 GROUP BY `branche_code` 
                                   ORDER BY total_in DESC LIMIT 10")
pi_63112905
quote:
Op maandag 10 november 2008 20:44 schreef Likkende_Lassie het volgende:

[..]

In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,
Bedankt voor de reacties tot nu toe!
Daar was ik al bang voor. Een koppeltabel is dan een veel betere oplossing. Gewoon een tabel met id's, kun je ook indexen op zetten. Is ook veel sneller met doorzoeken.
quote:
Bovenstaande oplossingen werken overigens niet.
Hierbij de gehele query, zoals de laatst genoemde mogelijkheid, niet werkend.
[ code verwijderd ]
Zoek eens op databasenormalisatie. Je kunt wel proberen om dit werkend te krijgen (en het kan vast ook) maar je kunt veel beter je tijd investeren in uitzoeken hoe het beter kan.
pi_63112995
Zo veel moeite is het toch niet om zo'n query op een leesbare manier op te schrijven zodat je misschine een beetje een idee heb waar je mee bezig bent?

1
2
3
4
5
6
7
8
9
"SELECT r.id, r.branche_code AS branche_code, b.name AS branche_name, b.total_in AS total 
FROM register_register r
LEFT JOIN register_branches b ON b.code = LIKE Concat('%', r.branche_code, '%')
WHERE r.id IN (". $sphinx['result']. " 0) 
   AND b.total_in > 0 
   AND b.in_small_overview > 0 
GROUP BY branche_code
ORDER BY total_in DESC 
LIMIT 10"


Probeer het eerst eens met een wat eenvoudigere versie van die query en lijk of je dan terug krijgt wat je zoekt. Die GROUP B klopt bijvoorbeeld ook niet.
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
  maandag 10 november 2008 @ 21:05:03 #167
12880 CraZaay
prettig gestoord
pi_63113047
quote:
Op maandag 10 november 2008 20:44 schreef Likkende_Lassie het volgende:

In dat veld staan de ID's van de branches, als volgt: ,6543,34543,4323,65432,1234,
GAD-VER-DAM-ME

  maandag 10 november 2008 @ 21:06:02 #168
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63113079
quote:
Op maandag 10 november 2008 21:01 schreef Light het volgende:

[..]

Daar was ik al bang voor. Een koppeltabel is dan een veel betere oplossing. Gewoon een tabel met id's, kun je ook indexen op zetten. Is ook veel sneller met doorzoeken.
[..]

Zoek eens op databasenormalisatie. Je kunt wel proberen om dit werkend te krijgen (en het kan vast ook) maar je kunt veel beter je tijd investeren in uitzoeken hoe het beter kan.
Een koppeltabel, zou die er zou uit kunnen zien?

brancheID registerID
04200 123456
0915 123456
3116 654321


dus meerdere regels voor een registerid?
pi_63113095
En Als je even
1SELECT * FROM register_branches WHERE code LIKE '%6543,34543,4323,65432,1234%'

had geprobeerd dan had je kunnen zien dat dat niet oplevert wat je wil (en dat het dus niet aan de join ligt)
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_63113463
quote:
Op maandag 10 november 2008 21:06 schreef Likkende_Lassie het volgende:

[..]

Een koppeltabel, zou die er zou uit kunnen zien?

brancheID registerID
04200 123456
0915 123456
3116 654321


dus meerdere regels voor een registerid?
Yep
brancheID registerID
04200 123456
0915 123456
0915 654321
3116 654321

Zowel brancheID als registerID komen meerdere keren voor (of kunnen dat iig). Alleen de combinatie is wel uniek.
  maandag 10 november 2008 @ 21:32:26 #171
85919 Likkende_Lassie
Doe eens wat aan je ondertitel
pi_63114000
Ok! Hij is nu bezig alles in te voeren, moet heel wat records inlezen en verwerken, duurt dus even.
De tabel ziet er zo uit:

1
2
3
4
5
6
7
8
CREATE TABLE IF NOT EXISTS `register_branches_register` (
  `id` int(11) NOT NULL auto_increment,
  `brancheID` int(11) NOT NULL,
  `registerID` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `brancheID` (`brancheID`),
  KEY `registerID` (`registerID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
pi_63116678
quote:
Op maandag 10 november 2008 21:32 schreef Likkende_Lassie het volgende:
Ok! Hij is nu bezig alles in te voeren, moet heel wat records inlezen en verwerken, duurt dus even.
De tabel ziet er zo uit:
[ code verwijderd ]
Dat veld ID is niet echt nuttig. Ik zou de tabel anders maken:
1
2
3
4
5
6
CREATE TABLE `register_branches_register` (
  `brancheID` int(11) NOT NULL,
  `registerID` int(11) NOT NULL,
  PRIMARY KEY  (`brancheID`,`registerID`),
  KEY `registerID` (`registerID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

De combinatie (brancheID, registerID) is uniek, en daardoor heb je ook meteen een index op brancheID.
pi_63123172
Is de vertaling naar het Nederlands makkelijker/logischer te doen?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$Month    
"11";
$Year    "2008";

$DaysMonth cal_days_in_month(CAL_GREGORIAN$Month$Year);

for (
$i 1$i <= $DaysMonth$i++) {
    echo 
'De datum ' .$i'-' .$Month'-' .$Year', valt op ';
    
$day date("l"mktime(000$Month$i$Year));
    if (
$day == "Monday") { echo 'Maandag'; }
    if (
$day == "Tuesday") { echo 'Dinsdag'; }
    if (
$day == "Wednesday") { echo 'Woensdag'; }
    if (
$day == "Thursday") { echo 'Donderdag'; }
    if (
$day == "Friday") { echo 'Vrijdag'; }
    if (
$day == "Saturday") { echo 'Zaterdag'; }
    if (
$day == "Sunday") { echo 'Zondag'; }
    echo 
'<br />';
}
?>
ne okuyon, bokmu var?
  dinsdag 11 november 2008 @ 10:32:04 #174
63192 ursel
"Het Is Hier Fantastisch!
pi_63123473
Ik zou het zelf in een switch gooien.
  dinsdag 11 november 2008 @ 10:33:12 #175
75592 GlowMouse
l'état, c'est moi
pi_63123493
Kijk eens naar setlocale en strftime.
eee7a201261dfdad9fdfe74277d27e68890cf0a220f41425870f2ca26e0521b0
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')