select distinct mysql werkt niet goed
Ik zie dubbele catagorieen staan.
Wat zie ik over het hoofd of doe ik fout ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sqlfilter = 'SELECT DISTINCT file , catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$resultfilter = mysql_query($sqlfilter);
while($rowfilter = mysql_fetch_array($resultfilter)) {
if ($rowfilter['catagorie'] != '') {
echo '<li><a href="#">' . $rowfilter['catagorie']. '</a></li>';
}
}
}
unset( $file );
?>
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sqlfilter = 'SELECT DISTINCT file , catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$resultfilter = mysql_query($sqlfilter);
while($rowfilter = mysql_fetch_array($resultfilter)) {
if ($rowfilter['catagorie'] != '') {
echo '<li><a href="#">' . $rowfilter['catagorie']. '</a></li>';
}
}
}
unset( $file );
?>
Logisch dat je meerdere keren dezelfde categorie krijgt.
Karl Karl op 28/12/2010 16:50:15:
Je doet meerdere keren de query uitvoeren (zonder foutafhandeling, zonder _fetch_assoc). De destinct doe je alleen op file, niet op categorie.
Logisch dat je meerdere keren dezelfde categorie krijgt.
Logisch dat je meerdere keren dezelfde categorie krijgt.
Niet helemaal waar. Bij MySQL geldt een DISTINCT voor de gehele rij en is een alias van SELECT DISTINCTROW.
Quote:
MySQL manual:
The ALL and DISTINCT options specify whether duplicate rows should be returned. ALL (the default) specifies that all matching rows should be returned, including duplicates. DISTINCT specifies removal of duplicate rows from the result set. It is an error to specify both options. DISTINCTROW is a synonym for DISTINCT.
The ALL and DISTINCT options specify whether duplicate rows should be returned. ALL (the default) specifies that all matching rows should be returned, including duplicates. DISTINCT specifies removal of duplicate rows from the result set. It is an error to specify both options. DISTINCTROW is a synonym for DISTINCT.
Ik ben nog niet uitgebreid ingegaan op de context van het probleem, maar waarom gebruik je een DISTINCT in de eerste plaats? Misschien dat het op een andere manier kan?
Gewijzigd op 28/12/2010 16:57:20 door kees Schepers
Kees Schepers op 28/12/2010 16:55:23:
Niet helemaal waar. Bij MySQL geldt een DISTINCT voor de gehele rij en is een alias van SELECT DISTINCTROW.
Karl Karl op 28/12/2010 16:50:15:
Je doet meerdere keren de query uitvoeren (zonder foutafhandeling, zonder _fetch_assoc). De destinct doe je alleen op file, niet op categorie.
Logisch dat je meerdere keren dezelfde categorie krijgt.
Logisch dat je meerdere keren dezelfde categorie krijgt.
Niet helemaal waar. Bij MySQL geldt een DISTINCT voor de gehele rij en is een alias van SELECT DISTINCTROW.
Oh, inderdaad, had effe wat anders in m'n kop. Maar sowieso leek mij distinct hier niet de oplossing.
Deze kunnen een catagorie hebben, bijv muziek of test.
Bij diverse bestanden staat dan de catagorie muziek.
Aangezien dit een link moet worden naar de bestanden moet ik muziek dus maar een keer hebben
Waarom haal je dan ook `file` op?
Zoiets?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
foreach ($files as &$file) {
$pad = $albumpath.rawurlencode($file);
$file = mysql_real_escape_string(str_replace(array('//','./images/'),array('/',''),$pad.$file));
}
$sql = 'SELECT DISTINCT catagorie FROM ' . $mysql_table_prefix . 'photo_files WHERE file IN("'.implode('","',$files).'"';
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
if(strlen($row['categorie']) > 0) {
echo '<li><a href="#">' . $row['catagorie']. '</a></li>';
}
}
?>
foreach ($files as &$file) {
$pad = $albumpath.rawurlencode($file);
$file = mysql_real_escape_string(str_replace(array('//','./images/'),array('/',''),$pad.$file));
}
$sql = 'SELECT DISTINCT catagorie FROM ' . $mysql_table_prefix . 'photo_files WHERE file IN("'.implode('","',$files).'"';
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)) {
if(strlen($row['categorie']) > 0) {
echo '<li><a href="#">' . $row['catagorie']. '</a></li>';
}
}
?>
Ik post hier even het hele script zodat je kunt zien wat mijn bedoeling is.
Eerst wordt een dir uitgelezen.
Dan wil ik weten welke catagorie elk file heeft in die dir
1 ul voor de catagorieen
Dan haal ik weer alle bestanden uit die dir op en plaats wat meer info bij de plaatjes uit die dir
Script is een beetje lang maar dan begrijpen jullie het
Code (php)
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
32
33
34
35
36
37
38
39
40
41
42
43
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
32
33
34
35
36
37
38
39
40
41
42
43
<?php
//Instellingen
$directory = './images/album/portfolio/'; //plaatjes path
$filter = '.jpg'; //extensite
$sort = 2; //Op volgorde, datum of niet
$dh = @opendir($directory);
while (false !== ($file=@readdir($dh)))
{
if (substr($file,0,1)!=".") #skip
{
if (strpos($file, $filter,1)) {
if($sort == 2){
$files[filemtime($directory . $file) . $file]=$file;
}else{
$files[]=$file; #everything else goes into files[]
}
}
}
}
@closedir($dh);
if (chk($files) != '') {
if ($sort == 1){
natcasesort($files); //Op natuurlijke volgorde
}elseif ($sort == 2){
krsort($files); //Sorteren op datum
//array_multisort($files, SORT_DESC, $files);
}else{
shuffle($files); //willekeurige volgorde !
}
$albumpath = str_replace('./images/','',$directory);
?>
//Instellingen
$directory = './images/album/portfolio/'; //plaatjes path
$filter = '.jpg'; //extensite
$sort = 2; //Op volgorde, datum of niet
$dh = @opendir($directory);
while (false !== ($file=@readdir($dh)))
{
if (substr($file,0,1)!=".") #skip
{
if (strpos($file, $filter,1)) {
if($sort == 2){
$files[filemtime($directory . $file) . $file]=$file;
}else{
$files[]=$file; #everything else goes into files[]
}
}
}
}
@closedir($dh);
if (chk($files) != '') {
if ($sort == 1){
natcasesort($files); //Op natuurlijke volgorde
}elseif ($sort == 2){
krsort($files); //Sorteren op datum
//array_multisort($files, SORT_DESC, $files);
}else{
shuffle($files); //willekeurige volgorde !
}
$albumpath = str_replace('./images/','',$directory);
?>
<div id="portfolio_album">
<ul id="filter">
<li>Filter op:</li>
<li class="current"><a href="#">Alles</a></li>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sqlfilter = 'SELECT DISTINCT catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$resultfilter = mysql_query($sqlfilter);
while($rowfilter = mysql_fetch_assoc($resultfilter)) {
if ($rowfilter['catagorie'] != '') {
echo '<li><a href="#">' . $rowfilter['catagorie']. '</a></li>';
echo $pad;
}
}
}
unset( $file );
?>
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sqlfilter = 'SELECT DISTINCT catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$resultfilter = mysql_query($sqlfilter);
while($rowfilter = mysql_fetch_assoc($resultfilter)) {
if ($rowfilter['catagorie'] != '') {
echo '<li><a href="#">' . $rowfilter['catagorie']. '</a></li>';
echo $pad;
}
}
}
unset( $file );
?>
</ul>
<ul id="portfolio">
Code (php)
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
32
33
34
35
36
37
38
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
32
33
34
35
36
37
38
<?php
foreach ($files as $key => $file) #sorted all files
{
//echo $file.'<br />';
$Namearray = array('_','-','%20');
$albumtext = ucfirst(RemoveExtension(str_replace($Namearray, ' ', $file)));
$pad = $albumpath.rawurlencode($file);
$sql = 'SELECT `file`, `description`, `title`, `link`, `catagorie`, `target` FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$result = mysql_query($sql);
if($row = mysql_fetch_assoc($result)){
$albumdb = ucfirst(RemoveExtension(str_replace($Namearray, ' ', $row['title'])));
$title = $albumdb;
if ($row['description'] != '') {
$desc = $row['description'];
}else{
$desc = $albumdb;
}
$link = $row['link'];
$target = $row['target'];
}else{
$title = $albumtext;
$desc = '';
$link = '';
$target = '';
}
$imagetest = './cms/temp/portfolio_' . $file;
if (file_exists($imagetest)) {
$imagealbpath = './cms/temp/portfolio_' . rawurlencode($file);
$dimensions = getimagesize($imagetest);
$thumbgroote = $dimensions[3];
}else{
$imagealbpath = './cms/thumb_portfolio.php?file=' . $pad;
}
?>
foreach ($files as $key => $file) #sorted all files
{
//echo $file.'<br />';
$Namearray = array('_','-','%20');
$albumtext = ucfirst(RemoveExtension(str_replace($Namearray, ' ', $file)));
$pad = $albumpath.rawurlencode($file);
$sql = 'SELECT `file`, `description`, `title`, `link`, `catagorie`, `target` FROM ' . $mysql_table_prefix . 'photo_files
WHERE file = "'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'";';
$result = mysql_query($sql);
if($row = mysql_fetch_assoc($result)){
$albumdb = ucfirst(RemoveExtension(str_replace($Namearray, ' ', $row['title'])));
$title = $albumdb;
if ($row['description'] != '') {
$desc = $row['description'];
}else{
$desc = $albumdb;
}
$link = $row['link'];
$target = $row['target'];
}else{
$title = $albumtext;
$desc = '';
$link = '';
$target = '';
}
$imagetest = './cms/temp/portfolio_' . $file;
if (file_exists($imagetest)) {
$imagealbpath = './cms/temp/portfolio_' . rawurlencode($file);
$dimensions = getimagesize($imagetest);
$thumbgroote = $dimensions[3];
}else{
$imagealbpath = './cms/thumb_portfolio.php?file=' . $pad;
}
?>
<li class="">
<a href="" rel="album">
<img src="" width="330" height="120" alt="" class="image" style="cursor: url(./css/zoomin.cur), pointer;" />
</a>
<p class="caption alpha">
<strong></strong><br />
<em>
</em>
<br /><a class="link" href="" target="_blank">Bezoek</a> ...
</p>
</li>
</ul>
code] en [/code].
Gebruik dan tenminste nog [de html code heeft niets te maken met het probleem
Ceasar Feijen op 28/12/2010 20:56:59:
Helaas werkt dat niet.
Waarom werkt het niet? Toch niet omdat je het zo gekopieerd en geplakt hebt zeker? Want je moet het natuurlijk wel even vergelijken maar in de basis zou het moeten doen wat jij wilt.
Je wilt toch alle categorieën van alle bestanden?
Sommige bestanden hebben dezelfde catagorie. Dus die moet maar een keer voorkomen in de <div id="portfolio_album"> en dat is dus niet zo helaas. de DISTINCT of de WHERE IN werken niet
Jouw vb geeft deze foutmelding
Warning: implode(): Invalid arguments passed in D:\Apache\htdocs\js\cms\modules\gallery3.php on line 58 SELECT DISTINCT catagorie FROM photo_files WHERE file IN("";
Toevoeging op 29/12/2010 12:41:10:
@bump
Iemand nog enig idee ?
Gewijzigd op 28/12/2010 23:54:26 door Ceasar Feijen
Heb in ieder geval een goed reultaat nu en het werkt. Hier de verbetering
<ul id="filter">
<li>Filter op:</li>
<li class="current"><a href="#">Alles</a></li>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$cats = Array();
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sql = 'SELECT catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file IN("'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'");';
mysql_query($sql) or die( mysql_error() );
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
if ($row['catagorie'] != '') {
if(!in_array($row['catagorie'],$cats))
echo '<li><a href="#">' . $row['catagorie']. '</a></li>';
$cats[] = $row['catagorie'];
}
}
}
?>
$cats = Array();
foreach ($files as $key => $file) #sorted all files
{
$pad = $albumpath.rawurlencode($file);
$sql = 'SELECT catagorie FROM ' . $mysql_table_prefix . 'photo_files
WHERE file IN("'.mysql_real_escape_string(str_replace('//','/',str_replace('./images/','',$pad))).'");';
mysql_query($sql) or die( mysql_error() );
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){
if ($row['catagorie'] != '') {
if(!in_array($row['catagorie'],$cats))
echo '<li><a href="#">' . $row['catagorie']. '</a></li>';
$cats[] = $row['catagorie'];
}
}
}
?>
</ul>
Hier het script in actie
http://www.content-management-systeem.info/gallery3.html
Gewijzigd op 30/12/2010 17:15:14 door Ceasar Feijen