[PHP MYSQL] array merge

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • soap
  • Registratie: December 2000
  • Laatst online: 17:27

soap

diskoers.

Topicstarter
Ik zit met een probleem waar ik nog geen oplossing voor heb kunnen vinden in alle manuals.

Ik heb bijvoorbeeld 3 tabellen (forumdb).

code:
1
2
3
4
5
POSTS
-- postID
-- topicID
-- postType
-- postTime


code:
1
2
3
NORMALPOSTS
-- postID_FK
-- postText


code:
1
2
3
4
5
REVIEWS
-- postID_FK
-- onderdeel1
-- onderdeel2
-- postText


Wat ik nu dus wil is bij een topic zowel de gewone posts ALS de REVIEWS in een array uitlezen.
En in de goede volgorde van posten weergeven.

array_merge maakt er echt een zooitje van en pakt willekeurig variabelen uit beide tabellen.
array_merge_recursive gooit variabelen ook nog eens in een array.

Hoop dat dit voldoende informatie is weet niet wat ik er nog meer over kwijt kan. :D

.


Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 23:40

Reinier

\o/

Hoe stop je om te beginnen je posts en reviews in je arrays? Heb je überhaupt wel ingewikkelde arrayoperaties nodig of kun je het in je SQL-statement oplossen?
Post je queries eens?

Acties:
  • 0 Henk 'm!

  • soap
  • Registratie: December 2000
  • Laatst online: 17:27

soap

diskoers.

Topicstarter
nou, de queries zijn ingewikkelder dan ik hier het zooitje uitleg heb het namelijk even in jip en janneke uitleg gedaan. Maar ok, hier zijn de queries ;)

SQL:
1
2
3
4
5
6
7
8
SELECT a.ID, a.username, a.nrPosts, a.bioPicture, a.signature, s1.clientCountry, s2.name, p2.postText, p1.postTime, p1.postID, t.topicName, r.onderdeel1, r.onderdeel2 
FROM g_posts p1, g_post p2, g_topic t, g_artist a, g_subscription s1, g_subtypes s2, g_review r 
WHERE t.topicID = $topicID 
AND t.topicID = p1.topicID 
AND p1.posterID = a.ID 
AND a.ID = s1.clientID 
AND s1.subType = s2.ID 
AND p1.postID = r.postID_FK


voor de reviews
en voor de normale posts:

SQL:
1
2
3
4
5
6
7
8
SELECT a.ID, a.username, a.nrPosts, a.bioPicture, a.signature, s1.clientCountry, s2.name, p2.postText, p1.postTime, p1.postID, t.topicName 
FROM g_posts p1, g_post p2, g_topic t, g_artist a, g_subscription s1, g_subtypes s2 
WHERE t.topicID = $topicID 
AND t.topicID = p1.topicID 
AND p1.postID = p2.postID_FK 
AND p1.posterID = a.ID 
AND a.ID = s1.clientID 
AND s1.subType = s2.ID


hoe ga ik die mergen? Het kan denk ik niet in een SQL query omdat de postID's OF de ene zijn OF de andere: een postID uit POSTS kan dus verwijzen naar OF een review OF een normale post

[ Voor 9% gewijzigd door soap op 12-10-2006 00:18 ]

.


Acties:
  • 0 Henk 'm!

Verwijderd

Eerste wat in me opkomt, een UNION?

Heb je in query 2 wel even null-values aan te maken voor de reviews, maar dat lijkt me ook niet zo lastig. Het is IMO echt niet nodig hier een array_merge oid voor te gebruiken, dit kan makkelijk in 1 query. Even verder nadenken dus :)

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 23:40

Reinier

\o/

Inderdaad een union op die twee results hierboven, mits de velden overeen komen. En op zich hadden de reviews en normale posts best in een enkele tabel gekund waarbij je onerdeel1 en onderdeel2 desnoods in een tabel onderdelen stop B)

Je queries kunnen wel wat mooier trouwens: gebruik joins op de relevantie velden in plaats van een impliciete cross join in combinatie met een enorme where-clause. Maar da's een beetje persoonlijke voorkeur ;)

Acties:
  • 0 Henk 'm!

  • soap
  • Registratie: December 2000
  • Laatst online: 17:27

soap

diskoers.

Topicstarter
de union op de 2 lukt; Maar het is wel een lelijke oplossing zo door 5 lege tabellen toe te voegen in de normale posts tabel.

Nog iets verder op de zaak ;)

onderdeel 1 en 2 zijn in totaal 6 onderdelen met andere namen en er zijn 2 verschillende soorten reviews.

8 fora met review type 1 en normale posts
10 fora met normale posts
2 fora met review type 2 en normale posts

Die WHERE clausule wordt inderdaad wel erg lang zo maar hij doet wattie moet doen, vooralsnog.

[ Voor 44% gewijzigd door soap op 12-10-2006 00:59 ]

.

Pagina: 1