Schrift
[thread]3723[/thread]

esskar in der SQL welt (Seite 3)

Leser: 2


<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten
MartinR
 2006-12-15 11:00
#34727 #34727
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=pq,15.12.2006, 09:52][quote=MartinR,15.12.2006, 07:06]
sollte da nicht einfach ein AVG(bewertung) reichen?[/quote]
jo, reicht auch
esskar
 2006-12-17 13:35
#34728 #34728
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay, schonaml danke.
nochwas:
ich muss hier an schlechtem db design vorbei programmieren

ich hab eine liste mit usern. jeder kann bis zu 5 wünsche haben.
die wünsche werden leider so in einer tabelle gespeichert:

user_id | wunsch1 | wunsch2 | wunsch3 | wunsch4 | wunsch5

hier das CREATE SQL dazu
Code: (dl )
1
2
3
4
5
6
7
8
9
10
CREATE TABLE `wuensche` (
`user_id` int(11) NOT NULL default '0',
`wunsch1` varchar(255) default NULL,
`wunsch2` varchar(255) default NULL,
`wunsch3` varchar(255) default NULL,
`wunsch4` varchar(255) default NULL,
`wunsch5` varchar(255) default NULL,
`last_update` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1


ist auch erstmal nicht zu ändern.
ich bräuchte jetzt ein SELECT, dass mir den user pro ausgefüllten wunsch auflistet.
dafür bau ich mir dann eine view.

also, wenn z.b. user 1 fünf wünsche gespeichert hat, dann wird user 1 fünf-mal in der view gelistet. in der view sollen dann die felder aus der user tabelle stehen + einzusetzliches feld mit namen wunsch, wo dann der jeweilige wunsch steht.

geht das irgendwie. ich hab ein problem mit dem select, dass momentan so aussieht.

[sql]SELECT u.*, w.wunsch1 AS wunsch FROM user u JOIN ( wuensche w ) ON ( w.user_id = u.id ) ORDER BY u.id;
[/sql]

das das nicht genügt, ist mir logisch klar.
die frage ist, wie ich das jetzt so hinbekomme, dass ich fuer winsch2 - 5 auch eine zeile hinbekomme!\n\n

<!--EDIT|esskar|1166356114-->
pq
 2006-12-17 14:08
#34729 #34729
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
mir faellt grad kein besserer weg als UNION ein:
[sql]SELECT w1.user_id,w1.wunsch1 AS wunsch
FROM wuensche AS w1 WHERE w1.user_id =1
UNION
SELECT w2.user_id,w2.wunsch2 AS wunsch
FROM wuensche AS w2 WHERE w2.user_id =1 ...[/sql]\n\n

<!--EDIT|pq|1166357424-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
MartinR
 2006-12-17 22:05
#34730 #34730
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
HI,

ich weiß nicht ob ich Dein Problem richtig verstanden habe. Aber warum machst Du nicht ein

Code: (dl )
SELECT * FROM wuensche WHERE user_id = 1


und speicherst die 5 Wünsche in einem Array und durchläufst dieses dann?
esskar
 2006-12-17 23:12
#34731 #34731
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mein problem ist, dass ich das resultat pagen muss und mich auch nicht um die verschiedenen sortierungen kümmern will, die ich anbieten muss.
esskar
 2006-12-18 08:05
#34732 #34732
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
hab es mit ner union gelöst.
hier mal das ganze als DBIx::Class lösung

Code: (dl )
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
package JM::Database::Schema::Candidate::CV::DesiredJobs::UnionWithCV;
use base qw/DBIx::Class/;

use strict;
use warnings;
use vars qw/$VERSION/;
$VERSION = '0.01';

our %Columns = (
%JM::Database::Schema::Candidate::CV::Columns,
job_title => {},
);

my $Sql = qq~(
SELECT cv.*, dj1.job_title1 AS job_title FROM `jm_candidates`.`desired_jobs` AS dj1 LEFT JOIN (`jm_candidates`.`cv`) ON (cv.id = dj1.cv_id) WHERE cv.completed = 'Y' UNION
SELECT cv.*, dj2.job_title2 AS job_title FROM `jm_candidates`.`desired_jobs` AS dj2 LEFT JOIN (`jm_candidates`.`cv`) ON (cv.id = dj2.cv_id) WHERE cv.completed = 'Y' UNION
SELECT cv.*, dj3.job_title3 AS job_title FROM `jm_candidates`.`desired_jobs` AS dj3 LEFT JOIN (`jm_candidates`.`cv`) ON (cv.id = dj3.cv_id) WHERE cv.completed = 'Y' UNION
SELECT cv.*, dj4.job_title4 AS job_title FROM `jm_candidates`.`desired_jobs` AS dj4 LEFT JOIN (`jm_candidates`.`cv`) ON (cv.id = dj4.cv_id) WHERE cv.completed = 'Y' UNION
SELECT cv.*, dj5.job_title5 AS job_title FROM `jm_candidates`.`desired_jobs` AS dj5 LEFT JOIN (`jm_candidates`.`cv`) ON (cv.id = dj5.cv_id) WHERE cv.completed = 'Y'
)~;

__PACKAGE__->load_components(qw/EncodeColumns Core/);
__PACKAGE__->table( 'dummy_desired_jobs_unionwithcv' );
__PACKAGE__->decode_columns( 'latin-1' );
__PACKAGE__->encode_columns( 'utf-8' );
__PACKAGE__->add_columns(%Columns);
__PACKAGE__->result_source_instance->name( \$Sql );
__PACKAGE__->belongs_to( candidate => 'JM::Database::Schema::Candidate', 'candidate_id' );

1;


( es waren gar keine wünsche :) )

schon sick, oder? Aber wenigstens ist DBIC so schlau die Sache auch zu verstehen.
renee
 2006-12-18 09:38
#34733 #34733
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@esskar: Wenn Du Dich mit CPAN:DBIx::Class auskennst, kannst Du da vielleicht was Kleines ins Wiki schreiben?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2006-12-18 10:02
#34734 #34734
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=renee,18.12.2006, 08:38]@esskar: Wenn Du Dich mit CPAN:DBIx::Class auskennst, kannst Du da vielleicht was Kleines ins Wiki schreiben?[/quote]
hab ab freitag 2 wochen frei.
mal sehen, wie ich da zeit&lust hab!
<< |< 1 2 3 >| >> 28 Einträge, 3 Seiten



View all threads created 2006-09-26 10:47.